123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- // (C) Copyright John Maddock 2000.
- // 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)
- //
- // Simple program to output some template specialisations for the type_traits library.
- //
- #include <fstream>
- using namespace std;
- unsigned specializations = 30;
- int main()
- {
- unsigned i, j;
- ofstream os("specialisations");
- //
- // generate is_function tester prototypes:
- for(i = 0; i <= specializations; ++i)
- {
- os << "template <class R";
- for(j = 0; j < i; ++j)
- {
- os << ", class A" << j;
- }
- os << ">\n::boost::type_traits::yes_type is_function_tester(R (*)(";
- if(i == 0)
- os << "void";
- else
- {
- for(j = 0; j < i; ++j)
- {
- if(j) os << ", ";
- os << "A" << j;
- }
- }
- os << "));" << endl;
- }
- os << endl << endl;
- //
- // generate is_function_helper partial specialisations:
- //
- for(i = 0; i < specializations; ++i)
- {
- os << "template <class R";
- for(j = 0; j < i; ++j)
- {
- os << ", class A" << j;
- }
- os << ">\nstruct is_function_helper_base<R (*)(";
- if(i == 0)
- os << "void";
- else
- {
- for(j = 0; j < i; ++j)
- {
- if(j) os << ", ";
- os << "A" << j;
- }
- }
- os << ")>{ BOOST_STATIC_CONSTANT(bool, value = true); };" << endl;
- }
- os << endl << endl;
- //
- // generate is_member_pointer_helper tester prototypes:
- for(i = 0; i <= specializations; ++i)
- {
- os << "template <class R, class T";
- for(j = 0; j < i; ++j)
- {
- os << ", class A" << j;
- }
- os << ">\n::boost::type_traits::yes_type is_member_pointer_helper(R (T::*)(";
- if(i == 0)
- os << "void";
- else
- {
- for(j = 0; j < i; ++j)
- {
- if(j) os << ", ";
- os << "A" << j;
- }
- }
- os << "));" << endl;
- }
- os << endl << endl;
- //
- // generate is_member_pointer partial specialisations:
- //
- for(i = 0; i < specializations; ++i)
- {
- os << "template <class R, class T";
- for(j = 0; j < i; ++j)
- {
- os << ", class A" << j;
- }
- os << ">\nstruct is_member_pointer<R (T::*)(";
- if(i == 0)
- os << "void";
- else
- {
- for(j = 0; j < i; ++j)
- {
- if(j) os << ", ";
- os << "A" << j;
- }
- }
- os << ")>{ BOOST_STATIC_CONSTANT(bool, value = true); };" << endl;
- }
- os << endl << endl;
- return 0;
- }
|