问题标签 [static-assert]

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 投票
2 回答
592 浏览

c++ - 不能在 MSVC10 中使用 SFINAE、类型特征和 static_assert

我一直在研究使用一些明智的静态断言来改进错误消息。这是一个例子:

IDEONE 会很高兴地拒绝这段代码,并给出我希望得到的漂亮、干净的错误消息(无论如何,一旦你将 nullptr 替换为 0)。但是 MSVC 不会触发静态断言并很好地编译这段代码——即使我添加了一些成员函数并开始调用它们。

0 投票
2 回答
1039 浏览

c++ - 仅在实际使用成员模板时如何在成员模板中进行静态断言?

考虑这个简单的类:

它允许从模板类型隐式构造和隐式转换回该类型,一个简单的包装器。

现在,我不想启用不相关Foo的 s 之间的转换,因为这些隐式构造/转换是可能的。我可以将模板化的 copy-ctor 设为私有,但我不想通过static_assert.

问题,如Ideone 上所示,static_assert即使我什至没有尝试复制类型,也会失败!在 Visual Studio 中,我得到了我想要的行为,尽管我认为这是由于 VS 解析模板的方式。有什么办法可以让这个工作吗?

0 投票
5 回答
16755 浏览

c++ - 在 static_assert 输出中集成类型名称?

我喜欢提供有用的错误/消息,我也想为我static_assert的 s 这样做。问题是,它们依赖于模板参数。通常,由于引发的错误,这些参数将在途中或其他地方显示,但它们要么晦涩难懂,要么没有分组,因此它们是有意义的。例子:

MSVC 上的输出:

一个标签在函数模板本身中被提及,另一个在下面的类模板中被提及。不太好。让我们看看GCC 的输出

好多了,但仍然不是真正的位置static_assert。现在想象一些更多的参数,或更多的模板,或两者兼而有之。颤抖

解决这个问题的一种方法是使用中间结构,它将两个标签都作为模板参数:

现在让我们再次查看输出:

好多了!这是GCC 所说的:

看起来还不错。问题:我需要为每个模板创建这样一个结构,因为错误消息static_assert需要是字符串文字......

现在,对于我的问题:我们能否以某种方式将类型名称直接包含在static_assert? 喜欢

示例输出:

无法Foo<int,main::TagA>Foo<int,main::TagB>.

或者,如果这无法实现,我们能否以某种方式使错误消息成为一个额外的模板参数,以使其可以通过?

0 投票
2 回答
532 浏览

visual-studio-2010 - 函数声明中的 static_assert

我有一个非常简单的功能,使用static_assert. 问题是我想了解static_assert函数声明中涉及的行为——特别是推断返回类型。似乎没有任何地方可以插入,static_assert这样我就可以在编译器无法推断出返回类型之前触发它。

到目前为止,我将返回类型推导和静态断言放在一个结构中。这将触发断言,这很好,但它仍然会在类型推导上产生错误,这是我想要消除的噪音。

0 投票
2 回答
3121 浏览

c++ - static_assert 在 Visual C++ 10 中不起作用

我的印象是Visual C++ 10 内置了static_assert. 但是,当我编译以下

我明白了

错误 C3861:“static_assert”:找不到标识符

我在做什么错以及如何static_assert在 Visual C++ 10 中使用?

0 投票
3 回答
1646 浏览

c++ - 结构内的静态断言是否允许?

我有几个模板设置结构,可以在这些结构中使用静态断言吗?

感谢您的回复!

0 投票
4 回答
8113 浏览

c++ - static_assert 可以检查类型是否为向量吗?

static_assert 可以检查类型是否为向量吗?IE, anint会提出断言,而 avector<int>不会。
我正在考虑以下内容:

0 投票
2 回答
4446 浏览

c++ - 为什么更喜欢基于模板的静态断言而不是基于 typedef 的静态断言?

对于没有内置的 C++ 版本,有两种广泛使用static_assert的静态断言实现。

第一个用于 Boost 并使用模板和该模板的特化

在这里,一旦要检查的条件为假,编译器就无法找到模板的通用版本并且编译失败。

第二个使用 a typedef

在这里,一旦违反了要检查的条件,编译器就会尝试typedef使用大小为 -1 的数组,这是非法的,因此会出现编译时错误。

对我来说,后者更好,因为它保证不发出任何代码,而且它可以像这样使用(从这里):

而前者不能那样使用。

有什么理由更喜欢静态断言的前一个实现而不是后一个?

0 投票
2 回答
599 浏览

c++11 - C ++ 11:静态断言()中的std :: max(a,b)?

我注意到,在最后一个 C++-Std Doc N3291 的 [24.4.7] 中max不是constexpr

因此,不允许在static_assert示例中使用它。正确的?

0 投票
1 回答
3931 浏览

c++ - 是否有编译时函数/宏来确定 C++0x 结构是否为 POD?

我想要一个 C++0x static_assert来测试给定的结构类型是否是POD(以防止其他程序员无意中用新成员破坏它)。IE,

is_pod_type()我可以在这里使用某种宏或内在函数吗?我在任何 C++0x 文档中都找不到,但当然,网络上关于 0x 的信息仍然相当零碎。