File: boost_has_vc6_mem_templ.ipp

package info (click to toggle)
boost1.74 1.74.0-9
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 464,084 kB
  • sloc: cpp: 3,338,324; xml: 131,293; python: 33,088; ansic: 14,336; asm: 4,034; sh: 3,351; makefile: 1,193; perl: 1,036; yacc: 478; php: 212; ruby: 102; lisp: 24; sql: 13; csh: 6
file content (58 lines) | stat: -rw-r--r-- 1,310 bytes parent folder | download | duplicates (23)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//  (C) Copyright John Maddock 2001. 
//  Use, modification and distribution are subject to the 
//  Boost Software License, Version 1.0. (See accompanying file 
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org/libs/config for most recent version.

//  MACRO:         BOOST_MSVC6_MEMBER_TEMPLATES
//  TITLE:         microsoft member templates
//  DESCRIPTION:   Microsoft Visual C++ 6.0 has enough member
//                 template idiosyncrasies (being polite) that
//                 BOOST_NO_MEMBER_TEMPLATES is defined for this compiler.
//                 BOOST_MSVC6_MEMBER_TEMPLATES is defined to allow
//                 compiler specific workarounds.
#ifndef BOOST_NESTED_TEMPLATE
#define BOOST_NESTED_TEMPLATE template
#endif

namespace boost_msvc6_member_templates{

template <class T>
struct foo
{
   template <class U>
   struct nested
   {
      typedef foo<U> other;
   };
   template <class U>
   void mfoo(const U&)
   {
   }
};

template <class T>
void vc6_mem_test(T i)
{
   foo<double> f1;
   typedef foo<T> ifoo;
   f1.mfoo(i);
   typedef typename ifoo::BOOST_NESTED_TEMPLATE nested<double> bound_t;
   typedef typename bound_t::other other;
   other o;
   (void)o;
}

int test()
{
   int i = 0;
   vc6_mem_test(i);
   return 0;
}

}