111
|
1 // PR c++/51884
|
|
2 // { dg-do compile { target c++11 } }
|
|
3 // { dg-final { scan-assembler "_ZN1BIZN3fooIivE3barILb1EEEvvE1CEC1ERKS4_" } }
|
|
4
|
|
5 template<typename TT>
|
|
6 struct test { static const int value = 0; };
|
|
7 template<int I>
|
|
8 struct enable_if { typedef void type; };
|
|
9
|
|
10 struct A { virtual void f() {} };
|
|
11 template<typename U> struct B : A { B(); B(const B&); };
|
|
12 template<typename U> B<U>::B() { }
|
|
13 template<typename U> B<U>::B(const B&) { }
|
|
14
|
|
15 template<class T> void g(T) { }
|
|
16
|
|
17 template<typename T, typename = void> struct foo;
|
|
18 template<typename T>
|
|
19 struct foo<T,typename enable_if<test<T>::value>::type>
|
|
20 {
|
|
21 template <bool P> void bar() {
|
|
22 struct C { } c;
|
|
23 B<C> b;
|
|
24 g(b);
|
|
25 }
|
|
26 };
|
|
27
|
|
28 int main() {
|
|
29 foo<int> f;
|
|
30 f.bar<true>();
|
|
31 }
|