// PR c++/78908 struct A { int a : 1; }; struct F { int foo (A const &); }; template struct O : F { int foo (A const &); }; struct S {} b; template int operator<< (L, T) { return (T) 123; } template int O::foo (A const &x) { return b << x.a; } int main () { A a = { 0 }; O o; if (o.foo (a) != 123) __builtin_abort (); signed char d = 2; if ((b << d) != 123) __builtin_abort (); }