Domanda

La detrazione del tipo di ritorno è consentita per le funzioni dei membri in C ++ 14 o solo per le funzioni gratuite?

Chiedo perché in qualche modo ho assunto implicitamente che avrebbe funzionato, ma in GCC 4.8.1 ricevo un errore del compilatore interno ("In Gen_Type_Die_With_Usage"). La prima volta che ho mai ricevuto un errore così criptico del genere, quindi sono un po 'scettico; E so che hanno cambiato le specifiche da allora.

Per chiarezza questo funziona per me:

auto foo() {return 5;}

Ma questo no:

class Bar{
auto baz() {return 5;}
}

È consentito nella bozza standard?

È stato utile?

Soluzione

Sì, lo standard dovrebbe consentirlo in base al documento N3582. Ecco un esempio dal documento.

Consentire dichiarazioni di funzionalità non definite con tipo di ritorno automatico non è strettamente necessario, ma è utile per gli stili di codifica che preferiscono definire le funzioni dei membri al di fuori della classe:

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }

E se lo permettiamo in quella situazione, dovrebbe essere valido anche in altre situazioni. Permetterlo è anche la scelta più ortogonale; In generale, credo che se la combinazione di due funzionalità può funzionare, dovrebbe funzionare.

Secondo il commento di @Bamboon, "La detrazione del tipo di ritorno è supportata solo da GCC 4.9". Questo spiegherebbe perché non ce l'hai.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top