decltype, auto



  • Hi. 🙂

    Ist das hier gültiges C++?

    class A
    {
      int i_;
    public:
      A(decltype(i_) i)
        : i_(i)
      {}
    };
    

    (Kompiliert zumindest mit MSVC und GCC -> http://ideone.com/6KzIM )
    Und warum funktioniert so ein Konstrukt dann nicht?

    class A
    {
      int i_;
    public:
      A(decltype(i_) i)
        : i_(i)
      {}
      auto i() -> decltype(i_)
      {
        return i_;
      }
    };
    

    Das kompiliert mit GCC, aber MSVC meckert:

    error C2327: 'A::i_' : is not a type name, static, or enumerator
    error C2065: 'i_' : undeclared identifier

    Ist das einfach ein "Bug" (bzw. nicht eingebautes Feature) vom MSVC oder kann GCC da halt etwas, was im Standard nicht vorgesehen ist? Ich bin gerade etwas verwirrt, weil VS diese Notation ja eigentlich unterstützt.



  • Ist, soweit ich das sehe, alles gültig. MSVC scheint im Zusammenhang mit den neuen Features einige Probleme mit dem Namelookup zu haben, hatte da auch schon 2 andere Probleme.



  • MSVC ist bei komplexeren Dingen kaputt. Kein ordentlicher Lookup und dann eben ein kaputter Parser.


Anmelden zum Antworten