gpt4 book ai didi

c++ - 模板类成员函数的完美转发返回类型

转载 作者:太空狗 更新时间:2023-10-29 20:49:45 25 4
gpt4 key购买 nike

考虑 this代码:

int TEN = 10;

template < typename >
struct XX
{
//static auto&& ban(auto&&...) // FAILS!?
template < typename... Args > static auto&& ban(Args&&...)
{ return TEN; }
};

int main()
{
XX<void>::ban();
return 0;
}

ban(auto&&...) 的声明失败了

error: invalid initialization of reference of type 'auto&&' from expression of type 'int'

使用 gcc-8.3 -std=c++17 -fconcepts 编译时。

那么,这是 GCC 实现中的错误吗?

请注意,当类 XX 不是模板时它会通过。

最佳答案

确实,它看起来像一个编译器错误。

一个简单的解决方法是使用尾随返回类型:

static auto ban(auto&&...) -> auto&& // strangely work
{ return TEN; }

另请注意,GCC 尚未完全支持此语法。概念简洁的模板语法应该允许这样:

template<typename>
concept /* bool */ test = true;

auto func(test auto) -> void {}

并且还没有完全使用 GCC 概念实现。

关于c++ - 模板类成员函数的完美转发返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495608/

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