Skip to content

Lambda decay inside lambda capture puts class definition inside constructor arguments #491

@erzyadev

Description

@erzyadev

constexpr auto x = sizeof([var=+[]{}]{var();});

translates into

class __lambda_1_27
{
  public: 
  inline /*constexpr */ void operator()() const
  {
    var();
  }
  
  private: 
  void (*var)();
  
  public:
  __lambda_1_27(  
  class __lambda_1_33
  {
    public: 
    inline /*constexpr */ void operator()() const
    {
    }
    
    using retType_1_33 = auto (*)() -> void;
    inline constexpr operator retType_1_33 () const noexcept
    {
      return __invoke;
    }
    
    private: 
    static inline /*constexpr */ void __invoke()
    {
      __lambda_1_33{}.operator()();
    }
    
    
    public:
    // /*constexpr */ __lambda_1_33() = default;
    
  };
  
  void (*_var)())
  : var{_var}
  {}
  
};

constexpr const unsigned long x = sizeof(__lambda_1_27{+static_cast<void (*)()>(__lambda_1_33{}.operator __lambda_1_33::retType_1_33())});

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions