问题标签 [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.
c++ - 不能在 MSVC10 中使用 SFINAE、类型特征和 static_assert
我一直在研究使用一些明智的静态断言来改进错误消息。这是一个例子:
IDEONE 会很高兴地拒绝这段代码,并给出我希望得到的漂亮、干净的错误消息(无论如何,一旦你将 nullptr 替换为 0)。但是 MSVC 不会触发静态断言并很好地编译这段代码——即使我添加了一些成员函数并开始调用它们。
c++ - 仅在实际使用成员模板时如何在成员模板中进行静态断言?
考虑这个简单的类:
它允许从模板类型隐式构造和隐式转换回该类型,一个简单的包装器。
现在,我不想启用不相关Foo
的 s 之间的转换,因为这些隐式构造/转换是可能的。我可以将模板化的 copy-ctor 设为私有,但我不想通过static_assert
.
问题,如Ideone 上所示,static_assert
即使我什至没有尝试复制类型,也会失败!在 Visual Studio 中,我得到了我想要的行为,尽管我认为这是由于 VS 解析模板的方式。有什么办法可以让这个工作吗?
c++ - 在 static_assert 输出中集成类型名称?
我喜欢提供有用的错误/消息,我也想为我static_assert
的 s 这样做。问题是,它们依赖于模板参数。通常,由于引发的错误,这些参数将在途中或其他地方显示,但它们要么晦涩难懂,要么没有分组,因此它们是有意义的。例子:
MSVC 上的输出:
一个标签在函数模板本身中被提及,另一个在下面的类模板中被提及。不太好。让我们看看GCC 的输出:
好多了,但仍然不是真正的位置static_assert
。现在想象一些更多的参数,或更多的模板,或两者兼而有之。颤抖
解决这个问题的一种方法是使用中间结构,它将两个标签都作为模板参数:
现在让我们再次查看输出:
好多了!这是GCC 所说的:
看起来还不错。问题:我需要为每个模板创建这样一个结构,因为错误消息static_assert
需要是字符串文字......
现在,对于我的问题:我们能否以某种方式将类型名称直接包含在static_assert
? 喜欢
示例输出:
无法
Foo<int,main::TagA>
从Foo<int,main::TagB>
.
或者,如果这无法实现,我们能否以某种方式使错误消息成为一个额外的模板参数,以使其可以通过?
visual-studio-2010 - 函数声明中的 static_assert
我有一个非常简单的功能,使用static_assert
. 问题是我想了解static_assert
函数声明中涉及的行为——特别是推断返回类型。似乎没有任何地方可以插入,static_assert
这样我就可以在编译器无法推断出返回类型之前触发它。
到目前为止,我将返回类型推导和静态断言放在一个结构中。这将触发断言,这很好,但它仍然会在类型推导上产生错误,这是我想要消除的噪音。
c++ - static_assert 在 Visual C++ 10 中不起作用
我的印象是Visual C++ 10 内置了static_assert
. 但是,当我编译以下
我明白了
错误 C3861:“static_assert”:找不到标识符
我在做什么错以及如何static_assert
在 Visual C++ 10 中使用?
c++ - 结构内的静态断言是否允许?
我有几个模板设置结构,可以在这些结构中使用静态断言吗?
感谢您的回复!
c++ - static_assert 可以检查类型是否为向量吗?
static_assert 可以检查类型是否为向量吗?IE, anint
会提出断言,而 avector<int>
不会。
我正在考虑以下内容:
c++11 - C ++ 11:静态断言()中的std :: max(a,b)?
我注意到,在最后一个 C++-Std Doc N3291 的 [24.4.7] 中max
不是constexpr
:
因此,不允许在static_assert
示例中使用它。正确的?
c++ - 是否有编译时函数/宏来确定 C++0x 结构是否为 POD?
我想要一个 C++0x static_assert来测试给定的结构类型是否是POD(以防止其他程序员无意中用新成员破坏它)。IE,
is_pod_type()
我可以在这里使用某种宏或内在函数吗?我在任何 C++0x 文档中都找不到,但当然,网络上关于 0x 的信息仍然相当零碎。