问题标签 [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++ - 即使模板函数在任何地方都没有调用,static_assert 也无法编译
我使用带有标志 c++0x 的 g++ 4.6.3(当前是 ubuntu 12.04 的默认包),我偶然发现了这个:
编译错误:
即使我还没有在任何地方调用这个函数。
它是一个 g++ 错误吗?仅当在代码中的某处调用此函数时才应实例化此函数。
c++ - C++11有没有办法静态测试方法访问级别?
C++11 添加了许多新的类模板,允许静态测试类型特征,即在编译时检测问题。我正在为一个类编写一个测试,我需要确保给定的方法是公开的。
“动态”解决方案是创建一个对象并调用该方法,如果它不起作用,编译器会抱怨。但是可能会发生不同类型的错误,这会使生成的错误消息更加混乱。如果可能,最好使用静态断言测试方法访问级别。
有可能还是我真的必须为此创建一个对象?
(另外,如果我需要该方法是私有/受保护的,我该怎么办)
c++ - 确定是否将相同的指针传递给宏
有一组宏,用于调试、日志记录、堆栈跟踪显示等。其中一个是:
这是我编写的宏的简化版本。如果断言(运行时)失败,我有自定义断言对话框,将此类空检查失败记录到日志文件中。还编写了宏,以便在编译时检查非指针(静态断言)。
现在,我正在寻找一些静态断言来检查两个指针是否实际上相同。例子:
应该引发编译器错误,因为宏的两个参数是相同的。我不在乎指针是否指向相同的内存(因为那是运行时的)。
我试过这样的表达:
它们都没有给出被零除的编译器错误。另外,我尝试过使用void*
模板参数的模板:
但它不允许将局部变量指针传递给模板非类型参数。
我正在使用VC9,它不支持constexpr
关键字(甚至 VS2012 也不支持)。我尝试使用 'const' 代替,这不会引发错误。我还将表达式用作数组大小,这总是会导致错误。
c++ - 包含非 Copyable 对象的对象的编译警告不可读
我之前问过一个类似的问题,但现在我想更具体一点。我面临的问题是我有一个包含不可复制对象的对象,当有人想要使用我的接口并且他没有很好地使用它(尝试使用对象的复制构造函数)时,他会得到一个编译错误,它将指向对象而不是他的实际代码。所以有两个问题:1.我可以以某种方式修复它以将其指向他的原始代码行吗?2.如果我不能,我怎么能放一个只有在有人真正尝试使用副本c'tor时才会发生的static_assert(我已经尝试了一些但即使有人不使用它我也会得到它们...... )
我正在添加示例代码和编译错误,以防我不理解...注意最后一个编译错误指向 ObjectHolder h。文件..虽然我希望它指向主要的谢谢!
*是我替换名称时的错误。实际上是导致编译错误的代码。让我们假设我不想实现一个私人复制 c'tor 只是为了转发残疾复制
c++ - /boost/lockfree/queue.hpp:错误:静态断言失败:(boost::has_trivial_destructor::价值)
我正在尝试在此文件中boost::lockfree::queue
替换https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppstd::queue
我添加了#include <boost/lockfree/queue.hpp>
;将行130
, std::queue<action> m_actions;
, 更改为boost::lockfree::queue<action> m_actions;
; 删除了所有与锁定有关的行;并将行103
, m_actions.pop();
, 更改为m_actions.pop(a);
.
在添加到项目根目录并在目录中使用's后,我scons broadcast_server_lockfree
在项目根目录中遇到这些错误:broadcast_server_lockfree = SConscript('#/broadcast_server_lockfree/SConscript',variant_dir = builddir + 'broadcast_server_lockfree',duplicate = 0)
SConstruct
broadcast_server
SConstruct
broadcast_server_lockfree
我对 C++ 几乎一无所知,并且对错误的搜索没有产生任何结果(因为我不知道我在读什么)。
boost::lockfree::queue
如果有帮助, 这是示例。http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
请告诉我如何纠正这个问题。
action
c++ - 在编译时比较静态字段指针
我有一个从类 A 派生的类 B。A 声明了一个静态字段 f,而 B 可能声明了一个类似的同名字段。以下不起作用:
尽管理论上可以在编译时检查这些断言,但它们是不允许的,因为常量表达式不能获取地址。
有没有办法在编译时进行这种检查?
c++ - 我在 C++11 中从未见过的代码
我在看这个源代码
我想知道这是否甚至是有效的C++。
这是什么?不专业的模板专业化?
为什么结构声明里面有代码行
我很困惑..
c++ - 使用 static_assert() 提供更好的编译时错误(比编译器)
const
昨天,我花了很长时间才解决由从非对象调用成员函数引起的编译时错误const
,如下例所示:
clang 错误消息是几行而且太神秘(没有提到const
),但是 gcc 提出了一个更好的错误(虽然更多行,但最终抱怨我忽略了 cv 限定符)。
所以,为了避免将来发生这种事情,我考虑static_assert()
在我的实用程序头中使用。我幼稚的做法
失败,因为编译器会立即触发错误,即使模板void add_child() const
从未被调用。我还能如何完成这项工作?
c++ - 静态断言和 SFINAE
考虑一下:
除了明显缺少标题之外,这应该编译吗?
换句话说,我在询问是否请求在推断重载函数模板的返回值时在尾随 decltype 内触发的静态断言失败来停止编译,或者是否必须简单地丢弃重载。
在 gcc 4.7 上,编译失败。我很肯定这将在 gcc 4.8 中编译好(但此时无法检查)。谁是对的?
c++11 - 如何使用 C++11 static_assert 进行类型约束?
如何static_assert
进行特定类型约束?
目前我想让我的模板只用于unsigned int
类型,而不是signed int
类型。或者,仅适用于整数类型或特定类型名称。static_assert(sizeof(int))
仅提供基于大小的断言,我不知道如何执行任何额外的检查。
我libc++
在 Xcode 4.6.2 中使用 Clang。这是命令行上的当前编译器信息。