我有一些有效的C代码,不能在ubsan下用g编译。简而言之(https://gcc.godbolt.org/z/9qvz89na8):
struct foo {
void bar() { }
};
void process(auto f) {
if constexpr(&decltype(f)::bar);
}
int main() {
process(foo{});
}
字符串
产量
In instantiation of 'void process(auto:1) [with auto:1 = foo]':
error: '(foo::bar != 0)' is not a constant expression
型
因此,我想检测我是否在ubsan下构建,试图通过使if constexpr
有条件地constexpr来缓解这个问题。
这在clang下是微不足道的,但在g++中,当我尝试查看预定义的宏时:
echo | g++ -fsanitize=undefined -dM -E -
型
我看不出任何暗示ubsan已启用的内容。有没有办法检测到这一点?
1条答案
按热度按时间oo7oh9g91#
这里有一个Oracle,似乎工作。
字符串
参见:https://gcc.godbolt.org/z/jra1bbY43完整示例。