2017-09-21 7 views
7

テンプレート関数は、クラス内で定義されたメンバ関数のように、リンク時に複数の定義に苦しみません。また、constexprオブジェクトには内部リンケージがありますが、テンプレート変数には外部リンケージがあります(名前空間のスコープとC++ 14の両方の場合)。ODR違反とテンプレート変数について

template<class T> 
constexpr T i_am_odr_safe{}; 

i_am_odr_safeはC++ 14には、外部または内部リンケージを持っていますか?関数テンプレートのような複数の定義に関しては安全ですか?

つまり、i_am_odr_safe odr-safeですか?

答えて

7

これはcore issue 1713であり、その方向はIIRCであり、この可変テンプレートは外部結合を有する。

これはまだ解決されていません。その理由は、LWGがP0604R0のA + B2を採用したときに、標準ライブラリの可変テンプレート全体にinlineを貼り付けたのです。

関連する問題