gpt4 book ai didi

c++ - 模板类中的尾随返回类型(GNU 和 Microsoft 编译器之间的矛盾)

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

以下代码在 msvc v120(预览编译器)上编译

template<typename T>
struct X
{
int f() const { return 0; }
auto g() -> decltype(f()) const { return f(); }
};

int main()
{
X<int> x;
return 0;
}

gcc 4.8.1 提示消息

cannot call member function 'int X::f() const without object

g 更改为

auto g() -> decltype(this->f()) const { return f(); }

解决了 gcc 的问题,但现在 msvc 输出

C2355: 'this' : can only be referenced inside non-static member functions

知道在这两种情况下我做错了什么吗?

最佳答案

首先是另一个数据点:clang 编译原始代码和修改后的版本。不过,我想这对你帮助不大。根据我的直觉理解,代码应该是正确的,但直觉可能很棘手,我怀疑浏览标准需要相当长的时间才能告诉您 gcc 和 MSVC++ 都是错误的,而且对您也没有太大帮助。

不过,您可能想尝试以下解决方法:

auto g() -> decltype(std::declval<X const>().f()) const { return f(); }

std::declval<>()<utility> 中声明.

关于c++ - 模板类中的尾随返回类型(GNU 和 Microsoft 编译器之间的矛盾),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283612/

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