2017-09-21 24 views
7

Tôi biết rằng các hàm mẫu không bị nhiều định nghĩa khi liên kết, như các hàm thành viên được định nghĩa bên trong một lớp, theo mặc định. Ngoài ra, constexpr đối tượng có liên kết nội bộ, nhưng các biến mẫu có liên kết bên ngoài (ý tôi là ở phạm vi không gian tên và cho C++ 14 trong cả hai trường hợp).Giới thiệu về các vi phạm ODR và ​​biến mẫu

Còn về?

template<class T> 
constexpr T i_am_odr_safe{}; 

i_am_odr_safe có liên kết bên ngoài hoặc nội bộ trong C++ 14? và có an toàn đối với nhiều định nghĩa như mẫu chức năng không?

Nói cách khác, là i_am_odr_safe không an toàn?

Trả lời

7

Đây là core issue 1713, hướng mà IIRC là mẫu biến này sẽ có liên kết bên ngoài.

Và không, điều này chưa được giải quyết, đó là lý do tại sao LWG quyết định trát thạch cao inline trên tất cả các mẫu biến trong thư viện chuẩn khi được thông qua A + B2 của P0604R0.

Các vấn đề liên quan