2017-09-21 5 views
7

Je sais que les fonctions de modèle ne souffrent pas de plusieurs définitions lors de la liaison, comme les fonctions membres définies dans une classe, qui sont intégrées par défaut. De plus, les objetsont une liaison interne, mais les variables de gabarit ont un lien externe (je veux dire à la portée de l'espace de noms et pour C++ 14 dans les deux cas).À propos des violations ODR et des variables de modèle

Qu'en est-il?

template<class T> 
constexpr T i_am_odr_safe{}; 

-t-i_am_odr_safe ont une liaison externe ou interne en C++ 14? et est-ce sûr en ce qui concerne les définitions multiples comme les modèles de fonction?

En d'autres termes, est i_am_odr_safe odr-sûr?

Répondre

7

Ceci est core issue 1713, la direction de laquelle IIRC est que ce modèle variable aura un lien externe.

Et non, cela n'a pas encore été résolu, c'est pourquoi LWG a décidé de plâtrer inline sur tous les modèles de variables de la bibliothèque standard en adoptant A + B2 de P0604R0.