[cfe-dev] Working with ConceptClang: Binding input arguments to functions.
Larisse Voufo
lvoufo at cs.indiana.edu
Fri Apr 22 02:05:04 PDT 2011
Here's a basic example I've been trying to get to work:
explicit concept A<typename T> {
typename AType;
AType h(AType a) {
return a;
}
AType f(AType a) {
AType b;
return b;
}
}
concept_map A<int> {
typedef char AType;
}
template<typename T>
requires (A<T>)
void func(T a, AType b) {
AType x = h(b); // <-- Instantiation DOES NOT WORK
AType y = f(b); // <-- Instantiation WORKS
}
int main(int argc, char **argv)
{
func<int>(10, 'a'); // Fails with declaration for 'x', for passes
with declaration of 'y'.
}
It appears that during the instantiation of *func<int>()*, the value for
input parameter '*b*' for '*func()*'
can be looked up no problem. However, that of '*a*' for associated function
'*h()*' cannot.
Instead, a call to
*clang::LocalInstantiationScope::getInstantiationOf()*fails at runtime
on the assertion:
*(D->isInvalidDecl() && "declaration was not instantiated in this scope!")*.
I have been tracing through the procedures for building, transforming, and
rebuilding Call Expressions -- as well as instantiating functions, noting
each
execution of *clang::LocalInstantiationScope::getInstantiationOf()* and *
clang::LocalInstantiationScope::InstantiatedLocal()*...
Still, I can't see what needs to be done differently for calls to *h()* from
calls to *func<int>()*. Hence...
Question:
When/how exactly are input arguments bound to functions?
Why would the current procedure fail to bind the value of '*b*' from the
context of *func<int>()* to the
parameter '*a*' of '*h()*' ?
Thanks,
-- Larisse.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110422/e39f5058/attachment.html>
More information about the cfe-dev
mailing list