Erlaubt std::reference_wrapper<T>
zulassen, dass T
unvollständig ist, in der gleichen Weise, wie eine T&
behandelt werden kann, ohne T
abgeschlossen zu sein?Kann ich ein std :: reference_wrapper <T> instanziieren, wobei T ein unvollständiger Typ ist?
GCC 4.9 übernimmt die folgenden:
#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!)
}
Aber MSVS 2012 lehnt es mit der folgenden Meldung:
Fehler 1 Fehler C2139: 'Wuff': eine undefinierte Klasse wird nicht als erlaubt Argument Merkmal intrinsischen Typ Compiler '__is_abstract' c: \ Programme (x86) \ Microsoft Visual Studio 11.0 \ vc \ include \ type_traits 755 1 test3
I vermute, dies ist, weil die op()
den vollständigen Typ benötigt, aber der Standard nicht erscheint, um jeden Weg anzugeben.
Welche der folgenden Implementierungen entspricht den Standardmandaten?
Ich habe keine Ahnung, aber meine Wette ist nicht auf MS –
Beachten Sie, dass MSVC schlägt fehl, unabhängig davon, was der Standard sagt: [Dieses Programm] (http://coliru.stacked-crooked.com/a/5a8e28dc279da2e5) doesn ' t kompilieren auf MSVC11 +, dank des 'is_abstract' Tests. – Xeo