https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85842

            Bug ID: 85842
           Summary: Bogus -Wreturn-type with generic lambda and constexpr
                    if
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ensadc at mailnesia dot com
  Target Milestone: ---

https://wandbox.org/permlink/qSgjLEWzpsJmkHNU

----
template<class T>
auto f = [](auto&& arg) -> T* {
    if constexpr (sizeof(arg) == 1) {
        return nullptr;
    } else {
        return static_cast<T*>(&arg);
    }
};

auto p = f<int>(0);

----
prog.cc: In instantiation of 'auto f<int>':
prog.cc:10:10:   required from here
prog.cc:2:6: warning: no return statement in function returning non-void
[-Wreturn-type]
 auto f = [](auto&& arg) -> T* {
      ^

----
This warning is bogus because both branches of `if constexpr` have a return
statement.

The warning will disappear when `if constexpr` is changed to `if`.

Reply via email to