[clang] [clang-tools-extra] [Clang] support friend declarations with a dependent nested-name-specifier (PR #191268)
Yanzuo Liu via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 10 21:59:46 PDT 2026
================
@@ -19,27 +19,33 @@ namespace pr41427 {
namespace Access {
struct B {
protected:
- struct type {};
+ struct type {}; // #Access-B-type
};
- template<typename T> struct D : B { // expected-note {{not viable}} \
- expected-note {{implicit deduction guide declared as 'template <typename T> D(Access::D<T>) -> Access::D<T>'}}
- D(T, typename T::type); // expected-note {{private member}} \
- // expected-note {{implicit deduction guide declared as 'template <typename T> D(T, typename T::type) -> Access::D<T>'}}
+ template<typename T> struct D : B { // #Access-D
+ D(T, typename T::type); // #Access-D-ctor
+ // expected-error at -1 {{'type' is a private member of 'Access::Y'}}
+ // expected-note@#Access-Y-type {{implicitly declared private here}}
+ // expected-note@#Access-D-ctor {{implicit deduction guide declared as 'template <typename T> D(T, typename T::type) -> Access::D<T>'}}
};
D b = {B(), {}};
class X {
using type = int;
};
- D x = {X(), {}}; // expected-error {{no viable constructor or deduction guide}}
+ D x = {X(), {}};
+ // expected-error at -1 {{no viable constructor or deduction guide}}
+ // expected-note@#Access-D {{implicit deduction guide declared as 'template <typename T> D(Access::D<T>) -> Access::D<T>'}}
+ // expected-note@#Access-D {{candidate function template not viable: requires 1 argument, but 2 were provided}}
+ // expected-note@#Access-D-ctor {{candidate template ignored: substitution failure [with T = X]: 'type' is a private member of 'Access::X'}}
// Once we implement proper support for dependent nested name specifiers in
// friends, this should still work.
----------------
zwuis wrote:
We can update/remove the comment.
https://github.com/llvm/llvm-project/pull/191268
More information about the cfe-commits
mailing list