// http://bugzilla.redhat.com/411871
// { dg-do compile }
extern "C" int printf (const char *, ...);
struct E
{
  template <typename T> E (const volatile T&);
  template <typename T> E (T&);
  char x[64];
};
template<typename T> struct D
{
  static E foo (E, ...);
  static int foo (T, int);
};
template<typename T, typename U> struct C
{
  static T ca;
  static const int value = sizeof (D<U>::foo (ca, 0)) == sizeof (int);
};
struct A
{
  int a;
};
namespace
{
  struct B
  {
    int a;
  };
}
int bar (void)
{
  C<A, int> a;
  C<B, int> b;
  return a.value + b.value;
}