【发布时间】:2018-03-16 21:45:40
【问题描述】:
我有两个结构a 和b:
struct a {
static constexpr int f() {
return 1;
}
static constexpr int c = f();
};
template<int I>
struct b {
static constexpr int f() {
return I;
}
static constexpr int c = f();
};
a 显然不起作用,因为f 被认为未在此处定义。但是为什么b 是有效的呢?
【问题讨论】:
-
为什么
a::f被认为是不完整的? -
@NicolBolas 不完整但未定义,请参阅:stackoverflow.com/questions/16493652/…
-
这很有趣。我认为答案必须是模板成员都是首先定义的,然后才实例化。但是找到相关的标准报价被证明是棘手的,整个事情带来了其他问题......
-
这是核心问题 2335 的另一个变体。
-
可以在c++17中添加内联帮助吗?