gpt4 book ai didi

c++ - 是否可以自由使用涉及类模板参数推导的函数样式转换表达式?

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:43 24 4
gpt4 key购买 nike

考虑一个例子:

template <class T>
struct tag {
tag(T) {}
};

int main() {
tag(int{}); //#1
auto t1 = tag(int{}); //#2
auto t3 = (tag(int{})); //#3
}

tag 有一个自动推导指南,应该参与类模板参数的推导。至少我认为它应该作为 #1 和 #3 在 [clang] 中表现得有点出乎意料。 .另一方面,在 [gcc] 中一切都可以正常编译.所以问题是我可以在函数样式转换表达式中自由使用类模板参数的推导,还是有任何限制?

clang的错误列表:

prog.cc:7:19: error: expected unqualified-id
tag(int{}); //#1
^
prog.cc:7:19: error: expected ')'
prog.cc:7:18: note: to match this '('
tag(int{}); //#1
^
prog.cc:9:23: error: expected ')'
auto t3 = (tag(int{})); //#3
^
prog.cc:9:19: note: to match this '('
auto t3 = (tag(int{})); //#3
^
prog.cc:9:27: error: expected expression
auto t3 = (tag(int{})); //#3
^
4 errors generated.

最佳答案

这是一个已知错误,#34091 .基本上,clang 并不期望在那里得到一个template-id。它最终会得到修复(但恐怕不是在 5.0.1 中)。

要回答你的问题,是的,gcc 是完全正确的。如果类模板参数推导不适用于这两个简单的情况,我真的会对标准委员会感到愤怒。 :P

关于c++ - 是否可以自由使用涉及类模板参数推导的函数样式转换表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47197957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com