Following compilation shows the issue: $ clang++ --version clang version 6.0.0 (trunk 316414) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /opt/compiler-explorer/clang-trunk/bin
$ cat a.cpp template <typename T> struct S { template <typename U> S(U&&) {} }; template <typename T> S(T) -> S<T>; int main() { S s(42); } $ clang++ -std=c++17 -Wundefined-func-template a.cpp a.cpp:13:7: warning: instantiation of function '<deduction guide for S><int>' required here, but no definition is available [-Wundefined-func-template] S s(42); ^ a.cpp:9:1: note: forward declaration of template entity is here S(T) -> S<T>; ^ a.cpp:13:7: note: add an explicit instantiation declaration to suppress this warning if '<deduction guide for S><int>' is explicitly instantiated in another translation unit S s(42); ^ I found out that this warning occurs at lib/Sema/SemaTemplateInstantiateDecl.cpp:3809: else if (TSK == TSK_ExplicitInstantiationDefinition) { // Try again at the end of the translation unit (at which point a // definition will be required). assert(!Recursive); Function->setInstantiationIsPending(true); PendingInstantiations.push_back( std::make_pair(Function, PointOfInstantiation)); } else if (TSK == TSK_ImplicitInstantiation) { //< here if (AtEndOfTU && !getDiagnostics().hasErrorOccurred()) { Diag(PointOfInstantiation, diag::warn_func_template_missing) << Function; Diag(PatternDecl->getLocation(), diag::note_forward_template_decl); if (getLangOpts().CPlusPlus11) Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Function; } } Shouldn't that check whether it's a deduction guide?
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits