已删除的函数在使用时带有编译时消息
deleted functions with a compile time message when they are used
因此,我试图限制对具有bool转换操作符的类型的操作-例如:
template <typename R>
Result
operator&&(const R&) {
STATIC_ASSERT(false, MY_MESSAGE);
return Result();
}
STATIC_ASSERT
是我的包装器宏围绕c++11 static_assert
和一个宏c++98静态断言。
我想要一个有用的消息,作为一个错误的用户,试图使用它,使其私有或删除它在c++11不是一个选项。
然而,这只适用于MSVC,因为MSVC和g++/clang之间的差异——在g++/clang中,静态断言总是触发——即使没有使用"deleted"函数。
我所见过的唯一能做到这一点的方法是使用一个未定义的类型,并将其名称作为消息作为模板的返回类型——就像这样:template<typename R>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison&
operator&&(const R&);
我第一次看到这个
在c++98中是否有其他的方法来做到这一点-当用户试图使用它时,一个带有自定义消息的删除函数?
在static_assert(false, message)
中,false
与模板无关。
你必须根据模板设置你的条件。
作为static_assert(!std::is_same<T, T>::value, message)
相关文章:
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- g++ 编译错误消息:/usr/bin/ld:找不到 -LSSL
- C++编译错误消息
- 是否有 G++ 7.2 选项在使用预编译头文件时发出消息?
- Android Studio,CMake.如何在编译时打印调试消息
- VS 代码显示编译 clang 的错误消息
- 有没有办法自定义编译错误/警告消息
- 卡住了Windows.h的工作,直到编译之前,没有错误消息
- AOT问题,消息"正在Xamarin iOS上尝试使用Pinvoke JIT编译方法"
- 无法在 C、C++ 和 Obj-C 中编译的代码,并显示特定的错误消息
- 在编辑器中"Error: type name is not allowed"消息,但不在编译期间
- 使用预编译标头时,海湾合作委员会在没有消息中失败
- 是否可以进行编译,以使错误的std::vector访问调用退出程序,并显示有用的错误消息
- Unix 命令行在编译后无法运行程序,没有错误消息
- 是否可以在 protobuf 中发送编译的 protobuf 消息定义
- 将 g++ 编译错误消息从 TMB 库导出到文本文件
- C++代码块 |我在编译时不断收到相同的消息" .......未在范围内声明。如何在范围内声明某些内容?
- std::vector 的 push_back() 导致奇怪的编译时错误消息
- 带有自定义消息的基于模板的编译时断言只能在某些编译器中编译
- 用汇编器消息编译错误