blob: 0b756fa45c33de62108b1297d050ef54a50542f3 [file] [log] [blame]
// checking nondeduced context
#include "config.h"
#ifdef _RWSTD_NO_TYPENAME
# define typename
#endif
// T::I is not deducible directly, but can be
// deduced if the T in const T* can (14.8.2.4, p3)
template <class T>
void foo (typename T::I, const T*);
template <class T>
struct A
{
typedef T I;
void bar () { foo (I (), this); }
};
// S<T>::I is not deducible directly, but can be deduced
// if the T in the second argument can (14.8.2.4, p3)
template <class T>
void foo (typename A<T>::I, const A<T>*);
template <class T>
void operator+ (typename A<T>::I, const A<T>&);
void foo ()
{
A<int> a;
1 + a;
a.bar ();
}
template <class T>
struct B
{
// U::I is not deducible directly, byt can be deduced if U can
template <class U>
void baz (const U&, typename U::I) { }
};
void bar ()
{
A<int> a;
B<int> b;
b.baz (a, ' ');
}