[過去ログ]
C++相談室 part165 (1002レス)
C++相談室 part165 http://mevius.5ch.net/test/read.cgi/tech/1698705458/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
414: デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 14:40:14.03 ID:yYuYqoCz0 いろいろとありがとうございます。参考になりました。 template<class T, class U> void f(T& x, U& y) { if constexpr ( !(std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::value) ) static_assert(false,"ワシャ許さんぞ!!"); y=x; } template <class T, class U> void g(T& x, U& y) { static_assert( (std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::v alue),"ワシャ許さんぞ!!" ); y=x; } int main() { using namespace std; double x=3.14159265358979; complex<double> z; f(x,z); g(z,x); // 順番変えたり、xをfloatにするとエラー cout<<z<<endl; しかし、コンパイル時にifがつかえるんですねえ。凄いな、constexpr http://mevius.5ch.net/test/read.cgi/tech/1698705458/414
422: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4d32-7Uxd) [] 2024/08/25(日) 01:15:32.96 ID:zZ+WMAII0 >>414 テンプレート型引数に require 節などで制約を付けた場合に制約に合致しなければオーバーロード解決候補から除外されるが、 static_assert や if constexpr での判定は解決が終わってテンプレートが実体化されるときに判定される。 つまり、より優先順位の低い候補に当てはめたいかもしれない場合は static_assert や if constexpr での判定をすべきではない。 状況によって使い分けがある。 それと >>418 が注意しているのは、テンプレートはテンプレート引数に依存しない部分は実体化されなくても検証されるルールだから。 (Two phase name lookup について調べてみて。) つまり static_assert(false, ほにゃらら) と書いてあったらそのテンプレートが使われるかどうかに関係なく問答無用でエラーとして報告されていた。 新しい仕様では static_assert は実体化のときまで検証しないように挙動が改められたのだが、これは欠陥報告の形で問題提起されて過去の仕様に遡って修正されるので C++11 からこの仕様だったことになった。 新しいコンパイラでは C++11 を指定したときでも新しい挙動になる。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/422
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.039s