Index: lib/Sema/SemaExprCXX.cpp =================================================================== --- lib/Sema/SemaExprCXX.cpp +++ lib/Sema/SemaExprCXX.cpp @@ -4258,7 +4258,10 @@ bool FoundConstructor = false; for (const auto *ND : Self.LookupConstructors(RD)) { // FIXME: In C++0x, a constructor template can be a default constructor. - if (isa(ND)) + // Skip the inherited constructors as we are only interested in default + // constructors which can't be inherited. + if (isa(ND) || isa(ND) || + isa(ND)) continue; const CXXConstructorDecl *Constructor = cast(ND); if (Constructor->isDefaultConstructor()) { Index: test/SemaCXX/PR30274-inherited-constructor-has-nothrow.cpp =================================================================== --- /dev/null +++ test/SemaCXX/PR30274-inherited-constructor-has-nothrow.cpp @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s +// expected-no-diagnostics + +struct Base { + Base(int a) : i(a) {} + int i; +}; + +struct Derived : Base { + using Base::Base; +}; + +int foo() { + return __has_nothrow_constructor(Derived); +}