2017-09-21 54 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決定在標準庫中的變量模板上抹上inline,當它採用P0604R0的A + B2時。