• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //  (C) Copyright Edward Diener 2020
2 //  Use, modification and distribution are subject to the Boost Software License,
3 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4 //  http://www.boost.org/LICENSE_1_0.txt).
5 
6 #include <boost/tti/detail/dmacro_sunfix.hpp>
7 
8   struct AType
9     {
SomeFuncTemplateNameAType10     template<class X,class Y,class Z> double SomeFuncTemplateName(X,Y *,Z &) { return 0.0; }
StatFuncTemplateAType11     template<class X,class Y,short AA> static int StatFuncTemplate(X *,Y) { int ret(AA); return ret; }
12     };
13 
14   template
15     <
16     class C,
17     class T
18     >
19   struct TestFunctionTemplate
20     {
21     typedef char Bad;
22     struct Good { char x[2]; };
23     template<T> struct helper BOOST_TTI_DETAIL_MACRO_SUNFIX ;
24     template<class U> static Good check(helper<&U::template SomeFuncTemplateName<int,long,double> > *);
25     template<class U> static Bad check(...);
26     static const bool value=sizeof(check<C>(0))==sizeof(Good);
27     };
28 
29   template
30     <
31     class C,
32     class T
33     >
34   struct TestStaticFunctionTemplate
35     {
36     typedef char Bad;
37     struct Good { char x[2]; };
38     template<T *> struct helper BOOST_TTI_DETAIL_MACRO_SUNFIX ;
39     template<class U> static Good check(helper<&U::template StatFuncTemplate<long,int,1234> > *);
40     template<class U> static Bad check(...);
41     static const bool value=sizeof(check<C>(0))==sizeof(Good);
42     };
43 
main()44   int main()
45     {
46 
47     bool bv =
48 
49     TestFunctionTemplate
50     <
51     AType,
52     double (AType::*) (int,long *,double &)
53     >::value
54 
55     &&
56 
57     TestStaticFunctionTemplate
58     <
59     AType,
60     int (long *,int)
61     >::value
62     ;
63 
64     return (bv ? 0 : 1);
65     }
66