是否 std::reference_wrapper<T>
允许 T
不完整,与a相同 T&
没有。可以处理 T
完成?
GCC 4.9接受以下内容:
#include <functional>
struct woof;
struct test
{
test(woof& w) : w(w) {}
std::reference_wrapper<woof> w;
};
struct woof
{
int a;
};
int main()
{
woof w;
test t = w; // (braced-init would be better, but VS2012!)
}
但是MSVS 2012通过以下消息拒绝它:
错误1错误C2139:'woof':不允许将未定义的类作为编译器内部类型特征的参数'__is_abstract'c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ type_traits 755 1 test3
我怀疑这是因为 op()
需要完整类型,但标准不需要 出现 指定任一方式。
这些实现中的哪一个符合标准要求?