当static_assert
触发时,编译器会尝试提供帮助,错误消息通常如下所示:
examples/foo.hh: In instantiation of ‘const char* examples::fail() [with T = dummy_t]’:
examples/foo.hh:35:77: required from ‘...’
examples/foo.hh:27:54: required from ‘...’
examples/foo.hh:42:25: required from ‘...’
examples/foo.hh:84:94: required from ‘...’
...
examples/foo.hh:27:54: required from ‘...’
examples/foo.hh:92:14: required from here
examples/foo.hh:12:36: error: static assertion failed: my error message
问题在于,在我的情况下,除了第一条和最后一条消息之外的所有内容都是多余的,并且可以防止错误消息真正起作用。在实践中,实例化上下文信息可能非常长(上下文的数量和上下文本身)。
是否有任何方法(技巧,甚至黑客)阻止编译器发出特定static_assert
的所有实例化上下文?我最感兴趣的是GCC和Clang输出。