gpt4 book ai didi

c++ - 参数列表中的 void_t 有效但不作为返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:57 25 4
gpt4 key购买 nike

cppreference 上有一个关于使用别名的例子。此示例失败,因为 int 没有成员 foo:

template<typename...> using void_t = void;
template<typename T> void_t<typename T::foo> f();
f<int>(); // error, int does not have a nested type foo

这很清楚,但是当我尝试将 void_t 部分放入参数列表时,它意外地编译了:

template<typename...> using void_t = void;
template<typename T> void f(void_t<typename T::foo>);
f<int>();

它可以在 clang 上编译,但不能在 gcc 上编译。这是错误吗?

最佳答案

template<class...>struct voider{using type=void;};
template<class...Ts>using void_t=typename voider<Ts...>::type;

关于使用无效类型/表达式的别名的未使用模板参数是否是替换失败,C++11 标准存在歧义。

gcc 和 clang 对子句的解释不同,这就是我认为您所看到的。上面的 void_t 应该使它在 gcc 和 clang 中工作相同。

关于c++ - 参数列表中的 void_t 有效但不作为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967003/

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