簡體   English   中英

鏈接器錯誤與變量模板

[英]Linker error with variable templates

請考慮以下代碼:

#include <iostream>

template<typename T>
T n;

int main()
{
    n<int> = 42;
    std::cout << n<int> << std::endl;
}

編譯並鏈接到g ++ 5.1 ,它顯示42 但是,clang ++ 無法鏈接它

對n <int>的未定義引用

如果我初始化模板變量,如

template<typename T> T n{};

然后clang ++也鏈接它

知道發生了什么事嗎? 如果沒有鏈接程序,clang ++“是否正確”? 如果我初始化模板變量,為什么它可以工作?

據我所知,模板變量只是圍繞靜態成員的模板包裝器的語法糖,因此n<int> = 42有效地專門化了int實例。 IMO,代碼應鏈接。

這是clang ++ #22825中的一個錯誤。 錯誤報告已於2015-03-06提交,並且該錯誤尚未修復。 理查德史密斯認為這個定義僅被視為前向聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM