用于引发字符串文本C++的编译器错误的宏
Macro to raise compiler error for string literal C++
我知道(邪恶?C++宏,它对除字符串文字之外的所有内容都引发编译器错误(前段时间在 SO 中找到它,但无法再次找到它(:
#define IS_STRING_LITERAL(X) "" X ""
是否有一个宏可以做"相反"的事情,即在字符串文字上引发编译器错误,但在其他输入上则不然?
编辑:请参阅评论,这是用于微控制器上的调试宏。字符串文字应该存在于 flash 中,如果我调用错误的宏,我希望在编译器时收到通知。"其他"应该是 int、float、char、char [] 和其他"基本"类型。
取决于这些"其他输入"是什么。如果它们可以是任何东西,那么答案可能是"不可能"。
你可以做这样的事情:
#define foo(x) (std::enable_if_t<!std::is_same_v<const char *, decltype(+(x))>>(), (x))
此行检查x
是否const char *
(或衰减为 1(,如果为 true,则会引发错误。(这不是你所要求的:不可能传递一个普通的const char []
。
std::cout << foo(123); // Works.
std::cout << foo("123"); // error: no type named 'type' in 'struct std::enable_if<false, void>'
相关文章:
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 重载方法的方式会在使用临时调用时生成编译器错误
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 编译器错误:destuctor 的更宽松的抛出说明符
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- C++ G++ 编译器 - 错误:隐式声明的定义
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 模板模板参数和模板别名:编译器错误?
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何在C++中克服此 C4430 编译器错误?
- 尝试使用 WinBGI 显示文本时出现编译器错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- C++自定义分配器大小参数作为模板参数会引发编译器错误