]>
Commit | Line | Data |
---|---|---|
e8b27b08 JM |
1 | // PR c++/61539 |
2 | // { dg-do compile { target c++11 } } | |
3 | ||
4 | template <typename _CharT> class A; | |
5 | template <typename> class B; | |
6 | template <class charT> class C; | |
7 | template <> class C<char> | |
8 | { | |
9 | virtual void xparse (int &, const B<A<char> > &) const; | |
10 | }; | |
11 | template <class T, class charT = char> class G : C<charT> | |
12 | { | |
13 | public: | |
14 | G (void *) {} | |
15 | void default_value (const T &); | |
16 | void xparse (int &, const B<A<charT> > &) const; | |
17 | }; | |
18 | template <class T, class charT> | |
19 | void validate (int &, const B<A<charT> > &, T *, int); | |
20 | template <class T, class charT> | |
21 | void G<T, charT>::xparse (int &p1, const B<A<charT> > &p2) const | |
22 | { | |
23 | validate (p1, p2, (T *)0, 0); | |
24 | } | |
25 | template <class T> G<T> *value (T *) { return new G<T>(0); } | |
26 | namespace Eigen | |
27 | { | |
28 | template <typename T> struct D; | |
29 | template <typename, int, int, int = 0, int = 0, int = 0 > class F; | |
30 | template <typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, | |
31 | int _MaxCols> | |
32 | struct D<F<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > | |
33 | { | |
34 | typedef _Scalar Scalar; | |
35 | }; | |
36 | template <typename, int, int, int, int, int _MaxCols> class F | |
37 | { | |
38 | public: | |
39 | typedef typename Eigen::D<F>::Scalar Scalar; | |
40 | F (const Scalar &, const Scalar &, const Scalar &); | |
41 | }; | |
42 | template <class... T> | |
43 | void validate (int &, const B<A<char> > &, Eigen::F<T...> *); | |
44 | } | |
45 | int main (int, char *[]) | |
46 | { | |
47 | Eigen::F<double, 3, 1> a (0, 0, 0); | |
48 | value (&a)->default_value (Eigen::F<double, 3, 1>(0, 0, 0)); | |
49 | } |