问题标签 [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 投票
1 回答
591 浏览

c++ - 如何在模板变量定义中引入 static_assert

如何引入static_assert模板变量定义?

我的尝试是使用 lambda 函数:

但是对于不可移动的对象,不可能以这种方式构造值对象。

使用逗号运算符我无法在 form 中执行值初始化F f = ([] () { static_assert(std::is_default_constructible< F >{}); }(), {});

我不能在表单中使用额外的模板参数, typename = decltype([] () { static_assert(std::is_default_constructible< F >()); }),因为它是一个错误lambda expression in an unevaluated operand

通过 SFINAE 禁用实例化不是解决方案。我确实需要static_assert明确地向用户说明错误。

如果static_assertreturnvoidbool.

0 投票
2 回答
1322 浏览

c++ - 前向声明一个 constexpr 变量模板

我试图constexpr像这样向前声明一个变量模板:

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

该错误是有道理的,删除constexpr会使它消失,所以这不是一个真正的问题。但是,我现在很好奇:标准是否允许constexpr对变量模板进行这样的前向声明,还是非法的?g++ 和 clang++ 似乎不同意,我想知道如果需要我应该在哪里提交错误报告。

他们俩都抱怨constepxr不是变量模板的前向声明变量,因此变量模板上下文似乎是使编译器不同意的原因。

0 投票
0 回答
687 浏览

c++ - 在 constexpr 变量模板中模拟 nan/inf

有没有办法在常量表达式中模拟 nan/inf 而没有!使用 C 宏 HUGE_VAL 和 INFINITY 或任何其他的!另外,即使有它们,它仍然不是 constexpr。

我不希望使用 C++ 标准库或 C 标准库提供的任何标准函数。

当然,以下不会编译。编译器说 constexpr 变量必须用常量表达式初始化......

MSVC 编译器使用的方法也无法编译:

我知道这有点宽泛,但这是针对图书馆的,我正在寻找一些有根据的建议!谢谢!

0 投票
2 回答
1305 浏览

c++ - 无法在不定义模板变量的情况下声明它

我想在头文件中转发声明变量模板,然后在单独的编译单元中进行实际实例化。

我被引导相信 C++14 变量模板的操作与静态类变量非常相似。不幸的是,情况似乎并非如此,它阻止我向前声明我的变量模板。

上面的代码示例在 GCC 下按原样编译和运行。但是取消注释第 10 行会产生编译时错误:

0 投票
1 回答
786 浏览

c++ - 模板变量的特化(用于模板模板类)

当我尝试为通用容器(例如std::list<...>,而不是特定容器,例如std::list<double>)专门化模板变量时,我得到一个链接错误gcc 5.3(但不是clang 3.5

http://coliru.stacked-crooked.com/a/38f68c782d385bac

(这可以很好地编译clang 3.5并按预期工作。可变参数模板也不是导致问题的原因,我尝试使用非可变参数模板)。

如果这不是 中的错误gcc,您认为有解决方法吗?我尝试使用类专业化,但也不可能:

0 投票
2 回答
310 浏览

c++ - 变量模板的开销

C++14 引入了变量模板(Variable templates)。

就二进制内存占用和运行时的速度而言,使用它的开销是多少?

0 投票
1 回答
40 浏览

c++ - 变量模板链接失败

以下代码:

在 Linux 上使用 gcc 版本 5.1.0 编译

在链接步骤中失败并显示以下消息:

删除一元减号(这会改变代码的含义),消除链接错误。前置零(这不会改变代码的含义)也可以消除错误。以下两种实现foo导致编译成功:

我没有在其他编译器中观察到这种行为。原始代码(带有一元减号)使用 clang 3.6.0 和 gcc 5.2.0 编译并运行良好。

在我将此作为 gcc 5.1.0 中的错误提交之前,我想听听您对此行为的看法。

0 投票
0 回答
153 浏览

c++ - 全局常量定义的变量模板语法

C++14定义x某种类型的全局常量的方法X是:

该技术使我们能够避免 ODR 违规(由于变量模板的外部链接)。

但是对于函数模板,在以下情况下可以方便地省略尖括号:

即使所有(非类型)模板参数都有默认(值),是否有任何理论上的理由否认引用没有模板参数列表的变量模板的可能性?能够以如下形式定义全局常量(例如,在仅标头库中)将非常方便:

然后能够在a没有任何尖括号的情况下引用。

0 投票
1 回答
1179 浏览

c++ - 变量模板和 std::enable_if

我可以对模板变量使用 enable_if (或者是否有一些替代技术可用)。例如

Pi<float>例如,当我尝试使用时,Visual Studio 会给我一个编译器错误,提示“模板参数太少” 。

0 投票
1 回答
45 浏览

templates - 提供可变参数模板包作为功能规范

我正在尝试创建一个具有模板包专业化的函数(它没有参数)并打印一条消息,直到最后一个函数专业化使它打印其他内容并停止。由于我真的很难解释,在这里我发布了我正在尝试做的代码:

作为第一个注释,我知道这不起作用UpdateStuff<TT...>();它会产生对重载函数的模棱两可的调用,我已经设法通过只给函数UpdateStuff()参数UpdateStuff(T first, TT... second)和专门化一个来使其工作,UpdateStuff(T first)但我想知道这是否可能没有函数参数,我将总结一下我的问题:

  • 我不完全理解为什么UpdateStuff<TT...>();不起作用,如果 TT 只是double在编译时,为什么它不使用第一个函数?
  • 是否可以在没有函数参数的情况下完成我想要完成的工作?

在此先感谢您,如果您不理解与我的问题相关的内容,我将不胜感激能更好地解释它,并为我糟糕的英语感到抱歉。