我尝试像这样前置声明一个constexpr
变量模板:
template<typename>
constexpr std::size_t iterator_category_value;
目标是记录每个特化版本都应该是 constexpr
,但我必须承认我从未检查过它是否合法,g++却没有报错。然而,当我试图使用clang++编译这个代码片段时,我遇到了以下错误:
错误是有道理的,移除
error: default initialization of an object of const type 'const std::size_t' (aka 'const unsigned long') constexpr std::size_t iterator_category_value; ^ = 0
constexpr
后错误消失了,所以这不是一个真正的问题。然而,现在我很好奇:标准是否允许为变量模板进行这样的constexpr
前向声明,或者这是非法的?g++和clang++似乎存在分歧,如果需要的话,我想知道应该向哪里提交错误报告。
它们两个都会抱怨前置声明的constepxr
变量不是变量模板,因此变量模板上下文似乎是编译器产生分歧的原因。
constexpr
,但我不太确定标准如何禁止它。 对我来说,变量模板看起来并不像对象声明。 - dypconstexpr
要求初始化) - dyp