gpt4 book ai didi

c++ - 转发声明一个 constexpr 变量模板

转载 作者:可可西里 更新时间:2023-11-01 15:48:31 24 4
gpt4 key购买 nike

我尝试像这样转发声明一个 constexpr 变量模板:

template<typename>
constexpr std::size_t iterator_category_value;

目标是记录每个特化都应该是 constexpr 但我不得不承认我从未检查过它是否合法并且 g++ 对此很满意。然而,当我尝试用 clang++ 编译这个 spinnet 时,我得到了以下错误:

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 变量不是变量模板,因此变量模板上下文似乎是编译器不同意的原因。

最佳答案

在 C++14 标准中,似乎很清楚需要初始化。摘自第 7.5.1 节第 9 段,

A constexpr specifier used in an object declaration declares the object as const. Such an object shall have literal type and shall be initialized.

至于“对象声明”的确切含义,第7节第7段指出:

If the decl-specifier-seq contains no typedef specifier, the declaration is called a function declaration if the type associated with the name is a function type and an object declaration otherwise.

关于c++ - 转发声明一个 constexpr 变量模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33197817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com