diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 50c15a1aa89e8b1..066003c47eb43f1 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -3194,8 +3194,7 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, break; } case DeclaratorContext::Member: { - if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static || - D.isFunctionDeclarator()) + if (D.isStaticMember() || D.isFunctionDeclarator()) break; bool Cxx = SemaRef.getLangOpts().CPlusPlus; if (isa(SemaRef.CurContext)) { diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5-cxx14.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5-cxx14.cpp new file mode 100644 index 000000000000000..8f3dac2426a3025 --- /dev/null +++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5-cxx14.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++14 + +struct A { + template + static constexpr auto x = N; + + template<> + constexpr auto x<1> = 1; + + template<> + static constexpr auto x<2> = 2; // expected-warning{{explicit specialization cannot have a storage class}} +};