friend function in decltype in trailing return type



  • Sobald ich eine, in einer friend declaration definierte, Funktion in einem decltype in einem trailing return type verwende, liefert MSVC 11 mir folgende Fehlermeldung:

    namespace math
    {
      struct vector
      {
        friend float dot(const vector& a, const vector& b)
        {
          return 42.0f;
        }
      };
    
      inline auto square(const vector& v) -> decltype(dot(v, v))
      {
        return dot(v, v);
      }
    }
    
    int main()
    {
      float l = square(math::vector());
    }
    

    Output:

    d:\blub\main.cpp(11): error C3767: 'dot': candidate function(s) not accessible
    1>          could be the friend function at 'd:\blub\main.cpp(5)' : 'dot'  [may be found via argument-dependent lookup]
    

    Sobald die Funktion außerhalb des struct definiert wird, klappt alles. Hat jemand eine Erklärung dafür? Ich vermute mal, dass es sich um einen Compilerbug handelt, denn imo sollte das perfekt standardkonformer Code sein...



  • dot schrieb:

    Ich vermute mal, dass es sich um einen Compilerbug handelt, denn imo sollte das perfekt standardkonformer Code sein...

    Mit clang und gcc kompiliert es anstandslos.



  • comiler-bot schrieb:

    dot schrieb:

    Ich vermute mal, dass es sich um einen Compilerbug handelt, denn imo sollte das perfekt standardkonformer Code sein...

    Mit clang und gcc kompiliert es anstandslos.

    Vielen Dank fürs ausprobieren, werd dann mal einen Bugreport schreiben...


Anmelden zum Antworten