此代码无法使用 GCC4.7 编译
struct A {};
void f(A);
struct B { B(std::tuple<A>); };
void f(B);
int main() {
f(std::make_tuple(A()));
}
因为GCC源自A
利用空基类优化。然而,这导致 GCC 选择f(A)
并抱怨
error: 'A'
是一个无法到达的基地'tuple<A>'
这个错误是 C++ 标准授予的还是这只是 libstdc++ 的一个错误?
我会说no.
至少:
§20.4.1 [元组.一般]
1/[...] 具有两个参数的元组的实例化类似于具有相同两个参数的对的实例化。见20.3。
And yet:
#include <tuple>
struct A {};
void f(A);
struct B { B(std::tuple<A, A>); };
void f(B);
int main() {
f(std::make_tuple(A(), A()));
}
fails http://liveworkspace.org/code/2KmeWQ%241 with:
Compilation finished with errors:
source.cpp: In function 'int main()':
source.cpp:10:30: error: 'A' is an ambiguous base of 'std::tuple<A, A>'
source.cpp:4:6: error: initializing argument 1 of 'void f(A)'
我非常怀疑这就是标准的意图。
尽管如此,至少可以说§20.4 相当简洁......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)