Hi John --<br><br>Indeed, the example you have below is supposed to work as argument binding for the functions hh() and ff() is equivalent that for func. The problem occurs when I'm trying to continue binding those arguments throughout <br>
(inner) calls to associated types, in cases where function templates are actually constrained.<br><br>Thanks for pointing it out though. It certainly helps clarify my point.<br><br>-- Larisse.<br><br><br><div class="gmail_quote">
On Fri, Apr 22, 2011 at 7:51 AM, Fletcher, John P <span dir="ltr"><<a href="mailto:j.p.fletcher@aston.ac.uk">j.p.fletcher@aston.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Larisse Voufo<br>
<br>
I don't have a solution to this, but here is a related code which does work using the concept clang.<br>
<br>
What it shows is that the lookup which fails in the concept works outside it.  Something in the concept context is messing it up.<br>
<br>
John Fletcher<br>
<br>
template <typename AType><br>
AType hh(AType a) {<br>
  return a;<br>
}<br>
<br>
template <typename AType><br>
AType ff(AType a) {<br>
  AType b = a;<br>
  return b;<br>
<div class="im">}<br>
<br>
<br>
explicit concept A<typename T, typename AType > {<br>
<br>
    AType h(AType a) {<br>
        return a;<br>
    }<br>
<br>
    AType f(AType a) {<br>
</div>      AType b = 10;// = a; NOTE: the accessing of a fails here.<br>
        return b;<br>
    }<br>
}<br>
<br>
concept_map A<int, char> {<br>
  //    typedef char AType;<br>
}<br>
<br>
template<typename T, typename U><br>
requires (A<T,U>)<br>
void func(T a,U b) {<br>
  //U x = h(b);         // <-- Instantiation DOES NOT WORK<br>
<div class="im">  U y = f(b);          // <-- Instantiation WORKS<br>
}<br>
<br>
int main(int argc, char **argv)<br>
{<br>
</div>  func<int,char>(10, 'a');   // Fails with declaration for 'x', for passes<br>
                             // with declaration of 'y'.<br>
  int a = hh(10);<br>
  int b = ff(20);<br>
    return 0;<br>
}<br>
<br>
</blockquote></div><br>