Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/template/memclass4.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// Origin: PR c++/42824 // { dg-do compile } template<int T> class int_ { }; template<int T, int T2> class Unit { public: Unit(const Unit<T, T2>& other) {} }; template<int T> class Quan { public: Quan(void) {} template<int T2> Quan(double value, Unit<T, T2> unit) {} }; typedef Quan<0> Scalar; template<int T> class hlp { public: typedef Quan<T> type; }; class Mtrl { public: template<int T> struct AssoType { typedef typename hlp<T>::type type; }; }; template<class T> class Eval { public: Eval(const T& object){} template<int V> void eval() { eval<V> (int_<0>()); } private: template<typename U> struct Wrap {}; template<int V, int V2> void value(Wrap<Quan<V2> >) {} template<int V> void value(Wrap<Scalar>) {} template<int V> void eval(int_<0>) { typedef typename T::template AssoType<V>::type Type; value<V>(Wrap<Type>()); } }; class Foo { public: static void eval(const Mtrl& mtrl) { Eval<Mtrl> h(mtrl); h.eval<0> (); } };