Here's a basic example I've been trying to get to work:<br><br>explicit concept A<typename T> { <br> typename AType; <br><br> AType h(AType a) { <br> return a;<br> }<br><br> AType f(AType a) { <br>
AType b;<br>
return b;<br>
}<br>}<br><br>concept_map A<int> {<br> typedef char AType;<br>} <br><br>template<typename T><br>requires (A<T>) <br>void func(T a, AType b) {<br> AType x = h(b); // <-- Instantiation DOES NOT WORK<br>
AType y = f(b); // <-- Instantiation WORKS<br>}<br><br>int main(int argc, char **argv) <br>{ <br> func<int>(10, 'a'); // Fails with declaration for 'x', for passes with declaration of 'y'. <br>
}<br><br><br>It appears that during the instantiation of <b>func<int>()</b>, the value for input parameter '<b>b</b>' for '<b>func()</b>'<br>can be looked up no problem. However, that of '<b>a</b>' for associated function '<b>h()</b>' cannot. <br>
Instead, a call to <b>clang::LocalInstantiationScope::getInstantiationOf()</b> fails at runtime on the assertion:<br><br><b>(D->isInvalidDecl() && "declaration was not instantiated in this scope!")</b>.<br>
<br>I have been tracing through the procedures for building, transforming, and rebuilding Call Expressions -- as well as instantiating functions, noting each <br>execution of <b>clang::LocalInstantiationScope::getInstantiationOf()</b> and <b>clang::LocalInstantiationScope::InstantiatedLocal()</b>...<br>
<br>Still, I can't see what needs to be done differently for calls to <b>h()</b> from calls to <b>func<int>()</b>. Hence...<br><br>Question: <br>When/how exactly are input arguments bound to functions?<br>Why would the current procedure fail to bind the value of '<b>b</b>' from the context of <b>func<int>()</b> to the <br>
parameter '<b>a</b>' of '<b>h()</b>' ?<br><br><br>Thanks,<br><br>-- Larisse.<br><br><br>