我遇到了一个奇怪的问题,其中编译的代码-Ox
编译得很好,但是编译的代码-g
在链接上失败,并出现以下错误:
Undefined symbols for architecture x86_64:
"stupid<dummy>::t", referenced from:
stupid<dummy>::operator()(int, int) const in main.o
重现此问题的代码:
struct dummy { void operator()(const int a, const int b) const {} ; };
template <typename T>
struct stupid {
constexpr static T t = T(); // create a new one;
stupid() {};
void operator()(int a, int b) const { t(a, b); }
};
int main()
{
const stupid<dummy> a;
a( 1, 2 );
}
似乎当代码被优化时,函数被内联并且不要求外部函数调用,但是当代码没有被优化时,函数被调用但不存在?(我不确定为什么它不存在......)。这发生在 g++ 4.7 和 4.8 以及 clang 3.2 中。
有任何想法吗?