std::reference_wrapper<T>是否允许T不完整,就像可以在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拒绝它并显示以下消息:



我怀疑这是因为op()需要完整类型,但是该标准似乎没有指定任何一种方法。

这些实现中的哪一个(如果有的话)遵循标准命令?

最佳答案

N3936§ 17.6.4.8其他功能[res.on.functions] :

快速浏览 20.9.3类模板reference_wrapper [refwrap] 不会发现reference_wrapper没有这样的特定异常,因此您的程序具有未定义的行为。两种实现方式都是一致的。

关于c++ - 我可以实例化std::reference_wrapper <T>,其中T是不完整的类型吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26043871/

10-11 22:59