[C++0x] decltype + überladene Funktionstemplates



  • Hallo zusammen, folgendes Szenario:
    Fremdcode:

    //boost/assign/ptr_map_inserter.hpp:
        template< class PtrMap >
        inline ptr_map_inserter< PtrMap, typename PtrMap::mapped_reference >
        ptr_map_insert( PtrMap& m )
        {
            return ptr_map_inserter< PtrMap, typename PtrMap::mapped_reference >( m );
        }
    
        template< class T, class PtrMap >
        inline ptr_map_inserter< PtrMap, T >
        ptr_map_insert( PtrMap& m )
        {
            return ptr_map_inserter< PtrMap, T >( m );
        }
    
    #include <boost/assign/ptr_map_inserter.hpp> 
    
    template <class T> class DataHandler
    {
      /* ... */
    };
    
      template <class T, class PtrMap>
      //boost::assign::ptr_map_inserter<PtrMap, DataHandler<T>>
    handlerMapInsert(PtrMap& map) -> decltype (boost::assign::ptr_map_insert<DataHandler<T>>(map))
      {
        return (boost::assign::ptr_map_insert<DataHandler<T>>(map));
      }
    

    Ergibt in MSVC2010

    ???.cpp(13): error C3557: Eine Funktion kann nicht sowohl einen Rückgabetyp als auch einen spät angegebenen Rückgabetyp aufweisen.
    ???.cpp(13): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    

    Vor allem die erste Fehlermeldung will mir nicht einleuchten. Wenn ich den decltype auskommentiere und den Rückgabetyp davor ein, dann passts. Was mache ich falsch?



  • auto vor den Funktionsnamen machen.



  • KasF schrieb:

    auto vor den Funktionsnamen machen.

    gnarf. Danke.


Log in to reply