如何让我的C++编译器发出constexpr值(例如在警告中?)

ein*_*ica 5 c++ compiler-warnings constexpr

(这是一个XY问题,但请耐心等待.)

我收到关于换档量太大的编译警告.现在,为了诊断这一点,我希望我的编译器以某种方式发出constexpr用作移位量的值.

到目前为止我完成它的方法是尝试使用数字参数实例化一个类型,我知道我可以将其放在范围之外,然后添加我想要的constexpr值并得到一个显示总和的错误.但这是一个丑陋的黑客.有没有办法让constexpr值(希望不仅仅是整数)发送到标准错误流?例如,连同一些解释性文字或警告信息?

我问的是GCC 6.x以及后来的clang 4.x及更高版本.

Sne*_*tel 1

嗯,明显的方法与您所说的类似 - 让编译器在发出诊断时提及该值。

\n\n
constexpr int I = 8 % 3;\n\ntemplate<int i>\nclass TheValueYouWantIs { static_assert(i != i); };\n\n\nint main() {\n    TheValueYouWantIs<I>();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此:

\n\n
prog.cpp: In instantiation of \xe2\x80\x98class TheValueYouWantIs<2>\xe2\x80\x99:\nprog.cpp:8:27:   required from here\n[...less informative stuff...]\n
Run Code Online (Sandbox Code Playgroud)\n\n

警告显然更依赖于编译器,但应该很容易实现。不过,这种事情对你处理 char 数组没有帮助。不是一个完整的解决方案。

\n