Hãy xem xét các đoạn mã sau:Linker lỗi với các mẫu biến
#include <iostream>
template<typename T>
T n;
int main()
{
n<int> = 42;
std::cout << n<int> << std::endl;
}
Nó compiles and links with g++5.1, và nó sẽ hiển thị 42
. Tuy nhiên, kêu vang ++ fails to link it:
không xác định tham chiếu đến n <int>
Nếu tôi khởi tạo mẫu biến như
template<typename T> T n{};
sau đó clang++ links it too.
Bất kỳ ý tưởng gì đang xảy ra? Là clang ++ "chính xác" trong không liên kết chương trình? Và tại sao nó hoạt động nếu tôi khởi tạo biến mẫu? Theo tôi biết, các biến mẫu chỉ là đường cú pháp cho các trình bao bọc mẫu quanh các thành viên tĩnh, vì vậy n<int> = 42
có hiệu quả trong trường hợp int
. IMO, mã nên liên kết.
Có vẻ như https://llvm.org/bugs/show_bug.cgi?id=22825 – dyp
@dyp Tôi đồng ý, có vẻ như vấn đề. – JKor
Đó là một thực tế. @dyp đăng một _answer_ không phải là một bình luận !! –