【发布时间】:2014-11-29 12:34:52
【问题描述】:
为什么以下内容适用于gcc,但不适用于clang,(see it live):
constexpr int giveMeValue() { return 42; }
struct TryMe {
static constexpr int arr[1] = {
giveMeValue()
};
};
int main() {
int val = TryMe::arr[0];
return val;
}
我用 clang 得到一个未解析的外部符号。
TryMe::arr[0] 是一个对象吗?如果是,它是 odr-used 吗?
【问题讨论】:
-
哪个版本的clang?
-
对我来说很好:coliru.stacked-crooked.com/a/2b319b9351784244 你打开
C++11 flag了吗? -
@texasbruce:您的实现之所以有效,是因为您在
struct TryMe之外添加了一个定义constexpr int TryMe::arr[1];,这使得它不会违反 odr。 OP的代码缺少这样的定义。
标签: c++ c++11 constexpr one-definition-rule