gpt4 book ai didi

c++ - 为什么类不能从 decltype 的结果继承?

转载 作者:IT老高 更新时间:2023-10-28 21:38:52 26 4
gpt4 key购买 nike

为什么一个类不能有 decltype在继承列表中?例如,我希望下面的代码可以生成 A<B>继承自 RType ,但使用 G++ 4.6.1(使用 -std=c++0x )无法编译:

#include <type_traits>

template<typename T>
class A : public decltype(std::declval<T>().hello()) { };

class RType { };

class B {
public:
RType hello() { return RType(); }
};

int main() {
A<B> a;
}

它给出以下输出:

test.cpp:6:18: error: expected class-name before 'decltype'
test.cpp:6:18: error: expected '{' before 'decltype'
test.cpp:6:54: error: expected unqualified-id before '{' token
test.cpp: In function 'int main()':
test.cpp:16:7: error: aggregate 'A<B> a' has incomplete type and cannot be defined

declval 的使用只是提供一个您需要使用的实例decltype , 但 decltype 的其他用途也会失败(也就是说,没有 declval )。

最佳答案

这是允许的:

10.1 : "基类列表可以在类定义中使用以下符号指定:"

class-or-decltype:
nested-name-specifieropt class-name
decltype-specifier

所以我猜你的编译器有错误

关于c++ - 为什么类不能从 decltype 的结果继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369011/

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