1274246Sae// Concept checking instantiations -*- C++ -*-
2274246Sae
3274246Sae// Copyright (C) 2001, 2002, 2003 Free Software Foundation
4274246Sae//
5274246Sae// This file is part of the GNU ISO C++ Library.  This library is free
6274246Sae// software; you can redistribute it and/or modify it under the
7274246Sae// terms of the GNU General Public License as published by the
8274246Sae// Free Software Foundation; either version 2, or (at your option)
9274246Sae// any later version.
10274246Sae
11274246Sae// This library is distributed in the hope that it will be useful,
12274246Sae// but WITHOUT ANY WARRANTY; without even the implied warranty of
13274246Sae// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14274246Sae// GNU General Public License for more details.
15274246Sae
16274246Sae// You should have received a copy of the GNU General Public License along
17274246Sae// with this library; see the file COPYING.  If not, write to the Free
18274246Sae// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19274246Sae// USA.
20274246Sae
21274246Sae// As a special exception, you may use this file as part of a free software
22274246Sae// library without restriction.  Specifically, if other files instantiate
23274246Sae// templates or use macros or inline functions from this file, or you compile
24274246Sae// this file and link it with other files to produce an executable, this
25274246Sae// file does not by itself cause the resulting executable to be covered by
26274246Sae// the GNU General Public License.  This exception does not however
27274246Sae// invalidate any other reasons why the executable file might be covered by
28274246Sae// the GNU General Public License.
29274246Sae
30274246Sae// The implementation of some of the more complex checks uses the simple
31274246Sae// checks (good reuse of code), thereby requiring that the simple checks
32274246Sae// be instantiated somewhere.  The simple checks use other simple checks,
33274246Sae// and so on, until a couple hundred symbols all need instantiations.  We
34274246Sae// explicitly instantiate the initial set of symbols; compiling this file
35274246Sae// with -fimplicit-templates will take care of the rest for us.
36274246Sae
37274246Sae#include <bits/concept_check.h>
38274246Sae
39274246Sae#ifdef _GLIBCXX_CONCEPT_CHECKS
40274246Sae
41274246Sae#include <memory>
42274246Sae#include <iterator>
43274246Sae#include <ostream>
44274246Sae
45274246Sae#define _Instantiate(...) template void __function_requires< __VA_ARGS__ > ()
46274246Sae
47274246Sae_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
48274246Sae
49274246Sae  template void __aux_require_boolean_expr<bool>(bool const&);
50274246Sae
51274246Sae  _Instantiate(_ConvertibleConcept<unsigned, unsigned> );
52274246Sae
53274246Sae  _Instantiate(_InputIteratorConcept<char*> );
54274246Sae
55274246Sae  _Instantiate(_InputIteratorConcept<char const*> );
56274246Sae
57274246Sae#ifdef _GLIBCXX_USE_WCHAR_T
58274246Sae  _Instantiate(_InputIteratorConcept<wchar_t*> );
59274246Sae
60284066Sae  _Instantiate(_InputIteratorConcept<wchar_t const*> );
61274246Sae
62274246Sae  _Instantiate(_LessThanComparableConcept<wchar_t*> );
63274246Sae#endif
64274246Sae
65274246Sae  _Instantiate(_LessThanComparableConcept<char*> );
66284066Sae
67274246Sae  _Instantiate(_LessThanComparableConcept<int> );
68274246Sae
69274246Sae  _Instantiate(_LessThanComparableConcept<long> );
70274246Sae
71274246Sae  _Instantiate(_LessThanComparableConcept<long long> );
72274246Sae
73274246Sae  _Instantiate(_LessThanComparableConcept<unsigned> );
74274246Sae
75274246Sae  _Instantiate(_OutputIteratorConcept<std::ostreambuf_iterator<
76274246Sae    char, std::char_traits<char> >, char> );
77274246Sae
78274246Sae#ifdef _GLIBCXX_USE_WCHAR_T
79274246Sae  _Instantiate(_OutputIteratorConcept<std::ostreambuf_iterator<
80274246Sae    wchar_t, std::char_traits<wchar_t> >, wchar_t> );
81274246Sae#endif
82274246Sae
83274246Sae  _Instantiate(_RandomAccessIteratorConcept<char*> );
84274246Sae
85274246Sae  _Instantiate(_RandomAccessIteratorConcept<char const*> );
86274246Sae
87274246Sae  _Instantiate(_RandomAccessIteratorConcept<
88274246Sae    __normal_iterator<char const*, std::string> > );
89274246Sae
90274246Sae  _Instantiate(_RandomAccessIteratorConcept<
91274246Sae    __normal_iterator<char*, std::string> > );
92274246Sae
93274246Sae#ifdef _GLIBCXX_USE_WCHAR_T
94274246Sae  _Instantiate(_RandomAccessIteratorConcept<
95274246Sae    __normal_iterator<wchar_t const*,
96274246Sae    std::basic_string<wchar_t, std::char_traits<wchar_t>,
97274246Sae                               std::allocator<wchar_t> > > > );
98274246Sae
99274246Sae  _Instantiate(_RandomAccessIteratorConcept<
100274246Sae    __normal_iterator<wchar_t*,
101274246Sae    std::basic_string<wchar_t, std::char_traits<wchar_t>,
102274246Sae                               std::allocator<wchar_t> > > > );
103274246Sae
104274246Sae  _Instantiate(_RandomAccessIteratorConcept<wchar_t*> );
105274246Sae
106274246Sae  _Instantiate(_RandomAccessIteratorConcept<wchar_t const*> );
107274246Sae#endif
108274246Sae
109274246Sae_GLIBCXX_END_NAMESPACE
110274246Sae
111274246Sae#undef _Instantiate
112274246Sae
113274246Sae#endif
114274246Sae