在clang(trunk)中,我可以使用以下方式前向声明一个稍后将用
constexpr
定义的对象:// Fwd-declarations
struct S;
extern const S s;
// (... later) definitions
struct S {};
constexpr S s {};
Gcc 4.8不喜欢这样,告诉我前向声明和定义在constexpr
方面不同。 Gcc说的是真的吗,还是只是gcc的一个错误?
-std=c++1y
启用;几乎没有什么方法可以无意中这样做。 - Griwesconstexpr
的支持(以兼容的方式)。我只是提出这种可能性。由于我在标准中找不到任何措辞,因此这两种实现都可以作为C++11的有效选择,或者这可能是一个标准缺陷。 - Adam H. Petersonconstexpr
对象声明需要一个初始化程序,而extern
仅仅不会放弃这个要求,但extern constexpr int q = 3;
仍然是有效的。 - Potatoswatter