Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
Make the "too many braces in scalar initialization" extension cause
Browse files Browse the repository at this point in the history
SFINAE failures.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@349820 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
zygoloid committed Dec 20, 2018
1 parent ca5c656 commit 3410781
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion include/clang/Basic/DiagnosticSemaKinds.td
Original file line number Diff line number Diff line change
Expand Up @@ -4880,7 +4880,7 @@ def warn_braces_around_scalar_init : Warning<
"braces around scalar initializer">, InGroup<DiagGroup<"braced-scalar-init">>;
def ext_many_braces_around_scalar_init : ExtWarn<
"too many braces around scalar initializer">,
InGroup<DiagGroup<"many-braces-around-scalar-init">>;
InGroup<DiagGroup<"many-braces-around-scalar-init">>, SFINAEFailure;
def ext_complex_component_init : Extension<
"complex initialization specifying real and imaginary components "
"is an extension">, InGroup<DiagGroup<"complex-component-init">>;
Expand Down
23 changes: 23 additions & 0 deletions test/SemaCXX/cxx0x-initializer-scalars.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,26 @@ namespace PR12118 {
static_assert(sizeof(f({0})) == sizeof(one), "bad overload");
}
}

namespace excess_braces_sfinae {
using valid = int&;
using invalid = float&;

template<typename T> valid braces1(decltype(T{0})*);
template<typename T> invalid braces1(...);

template<typename T> valid braces2(decltype(T{{0}})*);
template<typename T> invalid braces2(...);

template<typename T> valid braces3(decltype(T{{{0}}})*);
template<typename T> invalid braces3(...);

valid a = braces1<int>(0);
invalid b = braces2<int>(0);
invalid c = braces3<int>(0);

struct X { int n; };
valid d = braces1<X>(0);
valid e = braces2<X>(0);
invalid f = braces3<X>(0);
}

0 comments on commit 3410781

Please sign in to comment.