, bir hata alıyorum:Şablon fonksiyonu tipi kesinti ve operatör << C++ Ben <strong>MSVC++</strong> ile aşağıdaki kod derleme yaparken
struct A
{
template<typename T>
void operator<<(T&& x)
{
}
};
void f()
{
}
int main()
{
A().operator<<(f); // ok
A() << f; // error
return 0;
}
gr ++ ve clang bu kod cezası derlemek hem. AFAIK, 'Tamam' ve 'hata' satırları tam olarak aynı şeyi ve boşluğu (&)() için çıkarılır T yazın. Yoksa void() mu ve işlev için rönik referanslara izin verilir mi? Eğer öyleyse, anlamı nedir? İşlevleri bu şekilde referans olarak iletmek tamam mı? MSVC++ hata 'hata hata' derlemek için başarısız? BTW, hata çıktısı:
no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
could be 'void A::operator <<<void(void)>(T (__cdecl &&))'
with[ T=void (void) ]
Eğer C++ derleyicisi sürümünü sağlayabilir Visual Studio 2013 derleyici sabit olmuştur? NOV CTP güncellemesi ile – xis
MSVC++ 2012, test edilen gcc 4.5.3 ve 4.7.2, clang 3.0 ve 3.1 test edilmiştir. – dsi
VC11'im yok, bu yüzden araştırmam benim için zor, ama URef'in çökmesiyle bir hata gibi kokuyor. Derleyici yanlışlıkla bir RRef işlevi olarak yorumluyor ve girişte bir değer kabul etmiyor. Typedef void (* test)() olup olmadığını kontrol etmek ilginç olurdu; test g() {dönüş f; } ... A() << g(); ' –