You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* include declarations for explicitly-specified template parameters in
the lambda-sig mangling
* add mangling for template parameters at different depths (possible
via generic lambdas in unevaluated operands and via template template
parameters in lambda-sigs)
Fixesitanium-cxx-abi#31.
Let L be the number of template parameter scopes enclosing the
4995
+
template parameter scope in which the parameter is declared,
4996
+
excluding any template parameter scopes whose template arguments
4997
+
have already been substituted into the type or expression being mangled.
4998
+
Typically L will be zero, but can be nonzero when a generic lambda
4999
+
occurs within the signature of a function template or when mangling
5000
+
a template template parameter declaration. For example:
5001
+
5002
+
<pre><code>
5003
+
template<typename> struct A {
5004
+
// Type of a is TL0_0_, type of b is T_, type of c is TL0__, type of u is TL1__.
5005
+
template<typename T> void f(decltype([]<typename U, template<U u> typename>(auto a, T b, U c){})) {}
5006
+
};
5007
+
</code></pre>
5008
+
</p>
5009
+
4993
5010
<pre><code><fontcolor=blue>
4994
-
<template-param> ::= T_ # first template parameter
4995
-
::= T <<i>parameter-2 non-negative</i><ahref="#mangle.number">number</a>> _
5011
+
<template-param> ::= T_ # L == 0, first parameter
5012
+
::= T <<i>parameter-2 non-negative</i><ahref="#mangle.number">number</a>> _ # L == 0, second and later parameters
5013
+
::= TL <<i>L-1 non-negative</i><ahref="#mangle.number">number</a>> __ # L > 0, first parameter
5014
+
::= TL <<i>L-1 non-negative</i><ahref="#mangle.number">number</a>> _ <<i>parameter-2 non-negative</i><ahref="#mangle.number">number</a>> _ # L > 0, second and later parameters
<<aname="mangle.closure-type-name">closure-type-name</a>> ::= Ul <<ahref="#mangle.lambda-sig">lambda-sig</a>> E [ <<i>nonnegative</i><ahref="#mangle.number">number</a>> ] _
5532
5570
</pre></font></code>
5533
5571
with
5534
-
<pre><code><fontcolor=blue> <<aname="mangle.lambda-sig">lambda-sig</a>> ::= <<i>parameter</i><ahref="#mangle.type">type</a>>+ # Parameter types or "v" if the lambda has no parameters
0 commit comments