[英]C++17 Default template arguments: invalid use of template-name without an argument list
使用 C++17,您可以在 main 中進行類模板參數推導,如下例所示:
template<class T = int>
struct X{};
int main()
{
X myX;
}
為什么數據成員不允許模板參數推導?
template<class T = int>
struct X{};
struct Y
{
X myX;
};
int main()
{
Y myY;
}
錯誤:在沒有參數列表 X myX 的情況下無效使用模板名稱“X”;
我沒有參與這個決定,但是,我確實看到允許它存在一些問題。 讓我們假設以下代碼:
template<class T = int>
struct X
{
X(T t = T{}) {}
};
這使您的變量仍然可以:
int main()
{
Y myY;
}
但是,如果 Y 有一個在單獨文件中實現的構造函數呢?
struct Y
{
Y();
X myX{'a'};
};
Y::Y() : myX{0.0} {}
在這種情況下,我們是否希望myX
是X<int>
或X<double>
或X<char>
?
我可以看到對此可能存在混淆。 由於標准委員會無法恢復其決定,因此最好采取確定的一小步,看看人們是否需要它以及他們期望發生的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.