问题标签 [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.
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 只考虑实例化上面的代码。
哪个编译器是对的?为什么?你能引用标准吗?
备注:我的问题与这个问题不同。见评论。
c++ - 使用变量模板时,浮点常量计算为 0
在以下来源中,为什么DEG_TO_RAD_B
常数计算为0
?
使用 Visual Studio Community 2019 版本 16.4.5 输出:
没有收到任何编译器警告。无论 x86/x64/debug/release 配置设置如何,输出相同。
c++ - 如何将变量模板作为模板参数传递
我知道,我可以将类模板作为模板参数传递,如下所示:
但是假设我有一个变量模板:
如何将它作为模板参数传递?有简单的解决方案吗?我猜该语言根本不支持它。这不起作用:
标准化委员会是否正在努力将上述语法(或类似语法)作为新功能包含在 C++ 中?
我没有找到简单的解决方案。我想这就是为什么所有类型特征目前都由 STL 中的一个类(带有...::type
和...::value
成员)表示。我想避免使用类作为特征。例如,最直接的实现方式IsBig
是变量模板。
c++ - 如何创建变量模板?
////////////////////////////我在这里创建变量模板失败。
////////////////////////////
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
作为结果打印出来。
Clang 的行为令人惊讶。
我缺少的 C++ 标准中的变量模板实例化、全局变量和递归之间是否存在任何微妙的交互?
或者这是一个长期存在的 Clang 错误?
顺便说一句,标记fib
为constexpr
解决了这个问题(在 godbolt.org 上)。
c++ - ld:为变量模板报告架构 arm64 的重复符号
我将以下代码放入两个 .cpp 中,并在 Mac 上使用 clang 将其交叉编译为 ARM64 架构。使用了 C++14。
我收到以下链接器错误。
与其他编译器一起工作正常,即使在针对 x86-64 时使用 clang。
这是clang中的错误吗?
c++ - C++ Type Traits if_v(自动类型推断+确保相同类型)
考虑以下代码
由于我们在编译时就知道value1
and的类型是什么value2
,所以我们不必指定它。所以我们可以写
这样我们就可以编写一个简化的if语句if_v<test, value1, value2>
(没有类型)。理想情况下,我还想确保两个输入值的类型相同。但我不确定如何在使用auto
.
基本上,有没有更好的方法来定义if_v
这样我们可以if_v<test, value1, value2>
在不必指定类型的情况下编写,同时还能以某种方式static_assert
实现类型相等?
c++ - 为什么没有可变模板模板参数?
我打算创建一个变量模板,它采用(变量)模板模板参数和一个类型名:
期望在哪里:
但这不起作用。如果它们以标准存在,那将很有用。
另一种情况是创建一个元函数count_if
:
还有一个与我的问题有关的建议:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2008r0.html
- 为什么目前没有可变模板模板参数/参数?
- 提案的状态如何?
- 变量模板模板参数/参数是否有任何可能的替代方案?
c++ - 定义一个全局变量模板?
通常,我们会在头文件中声明但不定义全局变量。但是,我们在其中定义模板。那么问题来了:是否可以定义一个全局变量模板?
实际上,一个全局变量模板:
- 仅在至少一个编译单元 (CU) 需要它时才实例化。
- 如果多个 CU 需要相同的实例,则不会导致重新定义错误。
- CU 之间共享,即如果一个 CU 改变了一个实例的值,其他需要相同实例的 CU 将受到影响。
- 对于每种必需的实例,只调用一次初始化程序。
c++ - 使用 `auto` 关键字定义的变量模板的显式实例化
如果有一个变量模板,其类型是通过auto
关键字从初始化程序推导出来的,例如:
如何对特定类型的变量进行实例化(例如从共享库中导出)?
GCC 和 Clang 的方式是auto
用特定类型替换:
但它被 MSVC 拒绝并出现以下错误:
演示:https ://gcc.godbolt.org/z/66xModTjK
MSVC 要求将实例化为:
这反过来又被 GCC 和 Clang 拒绝,并带有一些奇怪的消息:
演示:https ://gcc.godbolt.org/z/7j3nh7Whx
根据标准,哪些编译器就在这里?