Explicit specifier can only be mentioned on the in-line declaration of a
constructor, so don't carry it over to the definition.
Differential Revision: https://reviews.llvm.org/D98164
if (MD->isStatic())
DelKeyword(tok::kw_static, {FD->getBeginLoc(), FD->getLocation()});
}
+ if (const auto *CD = dyn_cast<CXXConstructorDecl>(FD)) {
+ if (CD->isExplicit())
+ DelKeyword(tok::kw_explicit, {FD->getBeginLoc(), FD->getLocation()});
+ }
if (Errors)
return std::move(Errors);
};)cpp",
" void A::foo() {}\n",
},
+ {
+ R"cpp(
+ struct Foo {
+ explicit Fo^o(int) {}
+ };)cpp",
+ R"cpp(
+ struct Foo {
+ explicit Foo(int) ;
+ };)cpp",
+ " Foo::Foo(int) {}\n",
+ },
+ {
+ R"cpp(
+ struct Foo {
+ explicit explicit Fo^o(int) {}
+ };)cpp",
+ R"cpp(
+ struct Foo {
+ explicit explicit Foo(int) ;
+ };)cpp",
+ " Foo::Foo(int) {}\n",
+ },
};
for (const auto &Case : Cases) {
SCOPED_TRACE(Case.Test);