相关疑难解决方法(0)

使用派生类的静态constexpr数据成员初始化基类的静态constexpr数据成员

请考虑以下代码:

template<typename T>
struct S { static constexpr int bar = T::foo; };

struct U: S<U> { static constexpr int foo = 42; };

int main() { }
Run Code Online (Sandbox Code Playgroud)

GCC v6.1编译它,clang 3.8拒绝它并带有错误:

2:错误:'U'
结构中没有名为'foo'的成员S {static constexpr int bar = T :: foo; };

哪个编译器是对的?
可能是因为我们尝试在其中使用它时U 不是一个完整的类型S吗?
在这种情况下,它应该被认为是GCC的一个错误,但我想知道我是否正好在bug跟踪器上搜索/打开一个问题...

编辑

与此同时,我向GCC 打开了一个错误.
等待它接受答案.

c++ templates crtp constexpr c++14

14
推荐指数
1
解决办法
1580
查看次数

标签 统计

c++ ×1

c++14 ×1

constexpr ×1

crtp ×1

templates ×1