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/