Lambda und Constexpr - Nested Function workaround gesucht



  • Der neue GCC bietet ja endlich Constexpr und Lambdas an.
    Leider habe ich aber festgestellt das Lambdas keine Constexpr sind.
    Also geht folgender Code auch nicht:

    template<class T> constexpr auto Do( T const& X ) -> decltype(X())
    {
      return X();
    }
    
    template<uint I> class Test{};
    
    Test< Do( [](){return 1;} ) > X;  // fehler Lambda ist kein constexpr
    

    Kennt jemand ein Workaround dazu?

    Eigentlich hab ich mir mit dem neuen GCC erhofft das man den ganzen Umweg über pseudo-nested-functions ersparen könnte...

    Oder kennt jemand ne gute möglichkeit eingebette funktionen zu erstellen die eine Bestimmte Schnittstelle erfüllen müssen und auf bestimmte Variablen von der übergeordneten Funktion zugreifen könnten?

    Anwendung fände es in der Metaprogramierung zB. Generische Schleifen
    gruß



  • Ok, hab ne akzeptable möglichkeit gefunden; man definiert einfach in der funktion einen constexpr functor dessen member const sind.

    constexpr T Func(Param...X)
    {
    class Lambda
    {
     Param...
     constexpr U operator()(...){return ...}
    };
    
    return another_constexpr_Func( Lambda{X...} )
    

Anmelden zum Antworten