Biến là v
trong mã mẫu bên dưới odr-used?Mẫu đối số không loại cho loại tham chiếu và được sử dụng odr
extern void* v;
template<void*&>
void f() {}
int main()
{
f<v>();
}
Tôi tìm thấy mẫu này trong Boost ML.
cf. http://lists.boost.org/Archives/boost/2011/04/180082.php
Nó nói rằng boost::enabler
không bao giờ được xác định, nhưng kêu vang bác bỏ nó như là một lỗi liên kết nếu -g
tùy chọn được cung cấp.
cf. http://melpon.org/wandbox/permlink/nF45k7un3rFb175z
Mã mẫu ở trên là phiên bản rút gọn của mã Boost ML và clang cũng từ chối nó.
cf. http://melpon.org/wandbox/permlink/ZwxaygXgUhbi1Cbr
Tôi nghĩ (nhưng tôi không chắc chắn) mà đối số mẫu không loại cho loại tài liệu tham khảo là ODR-sử dụng ngay cả khi họ không được gọi trong mẫu cơ thể của họ để mô hình Boost ML của là vô hình thành.
Sự hiểu biết của tôi có đúng không?
Cảm ơn. Tôi chắc chắn rằng sự hiểu biết của tôi là chính xác. Nhưng tôi không chắc chắn làm thế nào để sử dụng một mẫu helper. Tôi nên sử dụng mẫu trình trợ giúp cho trường hợp của 'boost :: enable_if_c' ở đâu? –
@MitsuruKariya Mở rộng câu trả lời. – Columbo