我想知道是否
g++ -fsyntax-only
仅进行语法检查或是否也扩展模板。
因此,我要求堆栈溢出寻求帮助:
有没有办法编写一个程序,从语法上说它是有效的,但是当模板扩展完成时,会发生错误?
谢谢!
答案 0 :(得分:11)
有没有办法编写一个程序,从语法上说它是有效的,但是当模板扩展完成时,会发生错误?
取决于您对语法上有效的的定义是否为g++
的{{1}}。
以下简单的测试程序说明了这一点,我相信,它会回答您的问题:
-fsyntax-only
尝试建立:
// test.cpp
template< bool > struct test;
template< > struct test< true > { };
int main(void) {
test< false > t;
return 0;
}
是的, $ g++ /tmp/sa.cpp
test.cpp: In function `int main()':
test.cpp:6: error: aggregate `test< false> t' has incomplete type and
cannot be defined
$ g++ -fsyntax-only /tmp/sa.cpp
test.cpp: In function `int main()':
test.cpp:6: error: aggregate `test< false> t' has incomplete type and
cannot be defined
执行模板扩展。