2017-09-21 19 views
7

Wiem, że funkcje szablonu nie mają wielu definicji podczas łączenia, podobnie jak funkcje członkowskie zdefiniowane w klasie, które są domyślnie włączone. Również obiekty constexpr mają wewnętrzne powiązania, ale zmienne szablonów mają zewnętrzne powiązania (mam na myśli zakres nazw i C++ 14 w obu przypadkach).Informacje o naruszeniach ODR i zmiennych szablonu

Co z tym?

template<class T> 
constexpr T i_am_odr_safe{}; 

Czy i_am_odr_safe ma zewnętrzne lub wewnętrzne połączenie w C++ 14? i czy jest bezpieczny w odniesieniu do wielu definicji, takich jak szablony funkcji?

Innymi słowy, czy i_am_odr_safe odr-safe?

Odpowiedz

7

To jest core issue 1713, kierunek, w którym IIRC jest to, że ten szablon zmienny będzie miał połączenie zewnętrzne.

I nie, to jeszcze nie zostało rozwiązane, dlatego LWG zdecydowało się pokryć inline całym szablonem zmiennym w standardowej bibliotece, kiedy przyjęło A + B2 z P0604R0.

Powiązane problemy