13 Templates [temp]

13.8 Name resolution [temp.res]

13.8.3 Dependent names [temp.dep]

13.8.3.5 Dependent splice specifiers [temp.dep.splice]

A splice-specifier is dependent if its converted constant-expression is value-dependent.
A splice-specialization-specifier is dependent if its splice-specifier is dependent or if any of its template arguments are dependent.
[Example 1: template<auto T, auto NS> void fn() { using a = [:T:]<1>; // [:T:]<1> is dependent because [:T:] is dependent static_assert([:NS:]::template TCls<1>::v == a::v); // [:NS:] is dependent } namespace N { template <auto V> struct TCls { static constexpr int v = V; }; } int main() { fn<^^N::TCls, ^^N>(); } — end example]
[Example 2: template<template<class> class X> struct S { [:^^X:]<int, float> m; }; template<class> struct V1 {}; template<class, class = int> struct V2 {}; S<V1> s1; // error: V1<int, float> has too many template arguments S<V2> s2; // OK — end example]