トップページ > プログラム > 2016年02月14日 > Ssn6bioA

書き込み順位&時間帯一覧

25 位/241 ID中時間01234567891011121314151617181920212223Total
書き込み数0110000100000000000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part122 [無断転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part122 [無断転載禁止]©2ch.net
816 :デフォルトの名無しさん[sage]:2016/02/14(日) 01:45:35.51 ID:Ssn6bioA
よし最新の企画を読んだ俺が答えてやろう

クラスとクラステンプレートで宣言と定義に大差は無い
template<typename T> struct a {
 constexpr static int N = 0;
};
template<typename T> constexpr int a<T>::N;//アドレスを要求される場合必要
int main(){
f(&a<int>::N);
}
C++相談室 part122 [無断転載禁止]©2ch.net
818 :デフォルトの名無しさん[sage]:2016/02/14(日) 02:17:54.69 ID:Ssn6bioA
大丈夫だ。最新の規格も読んだのでぬかりはない
だが規格よりドラフトN4567の3.2 One definition ruleの方が近い例が書かれている
C++相談室 part122 [無断転載禁止]©2ch.net
820 :デフォルトの名無しさん[sage]:2016/02/14(日) 07:43:32.58 ID:Ssn6bioA
大丈夫だ。規格は全版揃えているからぬかりはない
規格は>806の通りで最初からこの仕様はある

C++98『The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition』
この時点でif it is usedが何を意味するのか説明が漏れていて(次の段落を読むと意図は想像できたが)、
C++11『if it is odr-used (3.2) in the program and the namespace scope definition』
と「odr-used」と言う言葉が導入された。これがリンカーの仕事が必要となるような使い方を意味する。
N4567では3.2のサンプルコードでstatic const int変数を
const int &f(const int &r);
に渡してodr-used here, so a definition is requiredとコメントが書かれている


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。