2015-06-17 18 views
11

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; 
} 

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.

+7

Có vẻ như https://llvm.org/bugs/show_bug.cgi?id=22825 – dyp

+0

@dyp Tôi đồng ý, có vẻ như vấn đề. – JKor

+2

Đó là một thực tế. @dyp đăng một _answer_ không phải là một bình luận !! –

Trả lời

6

Đây là lỗi trong clang ++ #22825. Báo cáo lỗi đã được đệ trình vào ngày 2015-03-06 và lỗi chưa được khắc phục. Richard Smith cho rằng định nghĩa này chỉ được xử lý không đúng như một tuyên bố chuyển tiếp.

+0

Xin lỗi, nhưng tôi không có thêm thông tin về lỗi này. Tôi có thể có một thời gian sau đó để xem xét các nguồn clang. – dyp

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