【发布时间】:2011-05-16 07:35:27
【问题描述】:
我一直在考虑以下问题。考虑两个文件:
A.cpp:
template<class T> void g(T) {}
inline void f() { g(1); }
B.cpp:
template<class T> void g(T) {}
void g(int) {}
inline void f() { g(1); }
如果没有void g(int) {},这个程序是 100% 有效的。使用void g(int) {},g(1) 解析为 A.cpp 中的模板版本和 B.cpp 中的非模板版本。
此程序是否违反 ODR?为什么?
【问题讨论】:
-
这是
include机制真正闪耀的地方:/ -
@Matthieu:这就是问题的来源。