@@ -1076,13 +1076,19 @@ class VirtualBaseClass extends Class {
10761076}
10771077
10781078/**
1079- * The proxy class (where needed) associated with a template parameter, as
1080- * in the following code:
1081- * ```
1079+ * The proxy class (where needed) associated with a template parameter or a
1080+ * decltype, as in the following code:
1081+ * ```cpp
10821082 * template <typename T>
10831083 * struct S : T { // the type of this T is a proxy class
10841084 * ...
10851085 * };
1086+ *
1087+ * template <typename T>
1088+ * concept C =
1089+ * decltype(std::span{std::declval<T&>()})::extent
1090+ * != std::dynamic_extent;
1091+ * // the type of decltype(std::span{std::declval<T&>()}) is a proxy class
10861092 * ```
10871093 */
10881094class ProxyClass extends UserType {
@@ -1093,10 +1099,13 @@ class ProxyClass extends UserType {
10931099 /** Gets the location of the proxy class. */
10941100 override Location getLocation ( ) { result = this .getTemplateParameter ( ) .getDefinitionLocation ( ) }
10951101
1096- /** Gets the template parameter for which this is the proxy class. */
1102+ /** Gets the template parameter for which this is the proxy class, if any . */
10971103 TypeTemplateParameter getTemplateParameter ( ) {
10981104 is_proxy_class_for ( underlyingElement ( this ) , unresolveElement ( result ) )
10991105 }
1106+
1107+ /** Gets the decltype for which this is the proxy class, if any. */
1108+ Decltype getDecltype ( ) { is_proxy_class_for ( underlyingElement ( this ) , unresolveElement ( result ) ) }
11001109}
11011110
11021111// Unpacks "array of ... of array of t" into t.
0 commit comments