// RUN: %clang_cc1 -std=c++1z -verify %s template constexpr bool same = false; template constexpr bool same = true; auto a() { if constexpr (false) return 0; } static_assert(same); auto b() { if constexpr (false) return 0; else return 0.0; } static_assert(same); auto c() { if constexpr (true) return "foo"; else return 'x'; if constexpr (false) return 7.6; else return 5; // expected-error {{deduced as 'int' here but deduced as 'const char *' in earlier}} } template auto d() { if constexpr(k == 0) return 0; if constexpr(k == 1) return "foo"; else if constexpr (k == 2) return 1.0; } static_assert(same()), int>); static_assert(same()), const char *>); static_assert(same()), double>); static_assert(same()), void>); auto e = []{ if constexpr (false) return 0; }(); // expected-error {{variable has incomplete type 'void'}} auto f = []{ if constexpr (true) return 0; }(); static_assert(same);