std::reference_wrapper<T>
, T
'un T
olmadan tamamıyla aynı şekilde tamamlanmasını sağlıyor mu?Bir std :: reference_wrapper <T>'u başlatabilir miyim, T tamamlanmamış bir türüdür?
#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!)
}
Ama MSVS 2012 aşağıdaki iletiyle bunu reddeder:
Hata 1 hata C2139: 'atkı': tanımlanmamış bir sınıfı bir şekilde izin verilmez
GCC 4.9 Aşağıdaki kabul bağımsız değişken c '__is_abstract' intrinsik tip özelliği derleyici için: \ Program Files (x 86) \ microsoft Visual Studio 11.0 \ vc \ \ 755 1 Test3
I type_traits içerir Bunun nedeni, op()
'un tam tür olması gerektiğinden şüphelenir, ancak iki yol belirtmek için standart görünmez görünür.
Bu uygulamalardan hangisi standart yönergeleri uyguluyorsa?
Hiç bir fikrim yok ama MS –
numaralı yazımda yok MSVC, standardın ne yazdığına bakılmaksızın başarısız olduğunu unutmayın: [Bu program] (http://coliru.stacked-crooked.com/a/5a8e28dc279da2e5) 'is_abstract' testi sayesinde MSVC11 + 'yı derleyin. – Xeo