是否存在static_warning?
我知道这个问题提到了Boost的“ STATIC WARNING”,但是我想再次提一个问题,特别是我如何实现一个static_warning操作类似于a的操作,static_assert但仅在编译时发出警告,而不是中止编译错误。 我想要类似于Alexandrescu提出的在C ++ 11之前的静态断言的提议,该提议以某种方式设法打印了一些有用的上下文信息作为错误的一部分。 要求用户启用某些标准的编译器警告以使此构造起作用(可能是“无效的指针转换”或“违反严格的别名规则”),这是可以接受的-无论如何,任何应作为常规编译一部分的警告都可以使用。 简而言之,我想static_warning(false, "Hello world");创建一个编译器警告,该警告应以某种方式在警告消息中包含字符串“ hello world”。在GCC和MSVC中,这可能吗?如何? 对于任何特别聪明的解决方案,我都会很高兴地给予小额奖励。 作为一点解释:在考虑这个问题时,我想到了一个主意:静态警告将是跟踪复杂模板专业化的编译时过程的有用方法,否则很难调试。静态警告可以用作编译器发出“我正在编译这部分代码”的简单信标。 更新。理想情况下,将在以下设置中触发警告: template <typename T> struct Foo { static_warning(std::is_pointer<T>::value, "Attempting to use pointer type."); // ... }; int main() { Foo<int> a; Foo<int*> b; }