在Visual Studio中,当我尝试编译时,我得到了一个static_assert,但是当我单击该错误时,它会转到断言本身而不是违规行。
如何找出哪条线触发了static_assert?
我知道你的意思,因为我也使用Visual Studio,但我认为你点击的不是正确的。
例如,如果在 IDE 中编译以下内容:
#include <type_traits>
template <class T> void f1 () { static_assert (std::is_same <T, int>::value, "oh no it isn't"); }
template <class T> void f2 () { f1 <T> (); }
int main ()
{
f2 <long> ();
}
然后你在"错误列表"窗口中看到这个:
错误 C2338 ...哦不,不是...测试.cpp(3(
这不是很有帮助。
但是,您查找的信息位于"输出"窗口中(在"构建"下(,如果我们查看那里,我们会看到:
test.cpp
g:sourceteststest.cpp(3): error C2338: oh no it isn't
g:sourceteststest.cpp(4): note: see reference to function template instantiation 'void f1<T>(void)' being compiled
with
[
T=long
]
g:sourceteststest.cpp: note: see reference to function template instantiation 'void f2<long>(void)' being compiled
还有你寻找的"堆栈跟踪"(你可以双击要带到相应源代码行的东西(。
就这么简单。 在rextester(我知道的唯一支持MSVC的在线编译器(上运行它。 当人们不理解这个问题时,典型的SO投反对票。