问题标签 [variable-templates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
83 浏览

c++ - 实例化变量模板时要考虑代码的哪一部分?

在以下程序中,全局变量isCompleteType<Apple>由 clang 和 gcc 以不同的方式初始化(​​位于godbolt.org上):

  • Clang 10.0.0 初始化isCompleteType<Apple>true.
  • Gcc 9.3 初始化isCompleteType<Apple>false.

由于Apple可以生成变量的定义true的实例化之后isCompleteType,所以我得出结论,编译器在初始化变量时会执行以下操作。

  • Clang 考虑整个翻译单元。
  • Gcc 只考虑实例化上面的代码。

哪个编译器是对的?为什么?你能引用标准吗?

备注:我的问题与这个问题不同。见评论。

0 投票
0 回答
79 浏览

c++ - 使用变量模板时,浮点常量计算为 0

在以下来源中,为什么DEG_TO_RAD_B常数计算为0

使用 Visual Studio Community 2019 版本 16.4.5 输出:

没有收到任何编译器警告。无论 x86/x64/debug/release 配置设置如何,输出相同。

0 投票
1 回答
227 浏览

c++ - 如何将变量模板作为模板参数传递

我知道,我可以将类模板作为模板参数传递,如下所示:

但是假设我有一个变量模板:

如何将它作为模板参数传递?有简单的解决方案吗?我猜该语言根本不支持它。这不起作用:

标准化委员会是否正在努力将上述语法(或类似语法)作为新功能包含在 C++ 中?

我没有找到简单的解决方案。我想这就是为什么所有类型特征目前都由 STL 中的一个类(带有...::type...::value成员)表示。我想避免使用类作为特征。例如,最直接的实现方式IsBig是变量模板。

0 投票
1 回答
54 浏览

c++ - 如何创建变量模板?

////////////////////////////我在这里创建变量模板失败。

////////////////////////////

0 投票
1 回答
246 浏览

c++ - 使用变量模板的递归计算 - gcc vs clang

考虑以下示例:

  • GCC 7.x、8.x、9.x 和 10.x 都打印出3 5 8.

  • Clang 5.x、6.x、7.x、8.x、9.x 和 10.x 都会1 3 4作为结果打印出来。

godbolt.org 上的实时示例


Clang 的行为令人惊讶。

我缺少的 C++ 标准中的变量模板实例化、全局变量和递归之间是否存在任何微妙的交互?

或者这是一个长期存在的 Clang 错误?

顺便说一句,标记fibconstexpr解决了这个问题(在 godbolt.org 上)。

0 投票
0 回答
50 浏览

c++ - ld:为变量模板报告架构 arm64 的重复符号

我将以下代码放入两个 .cpp 中,并在 Mac 上使用 clang 将其交叉编译为 ARM64 架构。使用了 C++14。

我收到以下链接器错误。

与其他编译器一起工作正常,即使在针对 x86-64 时使用 clang。

这是clang中的错误吗?

0 投票
2 回答
42 浏览

c++ - C++ Type Traits if_v(自动类型推断+确保相同类型)

考虑以下代码

由于我们在编译时就知道value1and的类型是什么value2,所以我们不必指定它。所以我们可以写

这样我们就可以编写一个简化的if语句if_v<test, value1, value2>(没有类型)。理想情况下,我还想确保两个输入值的类型相同。但我不确定如何在使用auto.


基本上,有没有更好的方法来定义if_v这样我们可以if_v<test, value1, value2>在不必指定类型的情况下编写,同时还能以某种方式static_assert实现类型相等?

0 投票
2 回答
103 浏览

c++ - 为什么没有可变模板模板参数?

我打算创建一个变量模板,它采用(变量)模板模板参数和一个类型名:

期望在哪里:

但这不起作用。如果它们以标准存在,那将很有用。

另一种情况是创建一个元函数count_if

还有一个与我的问题有关的建议:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2008r0.html

  • 为什么目前没有可变模板模板参数/参数?
  • 提案的状态如何?
  • 变量模板模板参数/参数是否有任何可能的替代方案?
0 投票
2 回答
75 浏览

c++ - 定义一个全局变量模板?

通常,我们会在头文件中声明但不定义全局变量。但是,我们在其中定义模板。那么问题来了:是否可以定义一个全局变量模板?

实际上,一个全局变量模板:

  • 仅在至少一个编译单元 (CU) 需要它时才实例化。
  • 如果多个 CU 需要相同的实例,则不会导致重新定义错误。
  • CU 之间共享,即如果一个 CU 改变了一个实例的值,其他需要相同实例的 CU 将受到影响。
  • 对于每种必需的实例,只调用一次初始化程序。
0 投票
0 回答
99 浏览

c++ - 使用 `auto` 关键字定义的变量模板的显式实例化

如果有一个变量模板,其类型是通过auto关键字从初始化程序推导出来的,例如:

如何对特定类型的变量进行实例化(例如从共享库中导出)?

GCC 和 Clang 的方式是auto用特定类型替换:

但它被 MSVC 拒绝并出现以下错误:

演示:https ://gcc.godbolt.org/z/66xModTjK

MSVC 要求将实例化为:

这反过来又被 GCC 和 Clang 拒绝,并带有一些奇怪的消息:

演示:https ://gcc.godbolt.org/z/7j3nh7Whx

根据标准,哪些编译器就在这里?