// { dg-do compile }

// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 15 Dec 2001 <nathan@codesourcery.com>

// PR 2645

template <typename T>
struct call_traits
{
  public:
  typedef T type_less_spec;
};

template <typename T>
struct call_traits<T&>
{
  typedef T type_more_spec;
};


int main()
{
  int num;
  
   // Two typedefs lead to the instant. of the less spec. ("wrong") template
  typedef int& r_type;
  typedef const r_type cr_type;
  call_traits<cr_type>::type_less_spec var  = num; // { dg-error "" }
  
   // The explicit type leads to the instantiation of the "correct" one
  call_traits<const int&>::type_more_spec var2 = num;
  
   // As happen with a single typedef!
  typedef const int& std_cr_type;
  call_traits<std_cr_type>::type_more_spec var3 = num;
  
  
   // As happen, indeed, without the cv-qualifier
  call_traits<r_type>::type_more_spec var4;
}
