197403Sobrien// Concept checking instantiations -*- C++ -*-
297403Sobrien
3117397Skan// Copyright (C) 2001, 2002, 2003 Free Software Foundation
497403Sobrien//
5103447Skan// This file is part of the GNU ISO C++ Library.  This library is free
6103447Skan// software; you can redistribute it and/or modify it under the
7103447Skan// terms of the GNU General Public License as published by the
8103447Skan// Free Software Foundation; either version 2, or (at your option)
997403Sobrien// any later version.
10103447Skan
11103447Skan// This library is distributed in the hope that it will be useful,
1297403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1397403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1497403Sobrien// GNU General Public License for more details.
1597403Sobrien
16103447Skan// You should have received a copy of the GNU General Public License along
17103447Skan// with this library; see the file COPYING.  If not, write to the Free
18169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19103447Skan// USA.
20103447Skan
2197403Sobrien// As a special exception, you may use this file as part of a free software
2297403Sobrien// library without restriction.  Specifically, if other files instantiate
2397403Sobrien// templates or use macros or inline functions from this file, or you compile
2497403Sobrien// this file and link it with other files to produce an executable, this
2597403Sobrien// file does not by itself cause the resulting executable to be covered by
2697403Sobrien// the GNU General Public License.  This exception does not however
2797403Sobrien// invalidate any other reasons why the executable file might be covered by
2897403Sobrien// the GNU General Public License.
2997403Sobrien
3097403Sobrien// The implementation of some of the more complex checks uses the simple
3197403Sobrien// checks (good reuse of code), thereby requiring that the simple checks
3297403Sobrien// be instantiated somewhere.  The simple checks use other simple checks,
3397403Sobrien// and so on, until a couple hundred symbols all need instantiations.  We
3497403Sobrien// explicitly instantiate the initial set of symbols; compiling this file
3597403Sobrien// with -fimplicit-templates will take care of the rest for us.
3697403Sobrien
3797403Sobrien#include <bits/concept_check.h>
3897403Sobrien
39132720Skan#ifdef _GLIBCXX_CONCEPT_CHECKS
4097403Sobrien
4197403Sobrien#include <memory>
42117397Skan#include <iterator>
4397403Sobrien#include <ostream>
4497403Sobrien
4597403Sobrien#define _Instantiate(...) template void __function_requires< __VA_ARGS__ > ()
4697403Sobrien
47169691Skan_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
48169691Skan
4997403Sobrien  template void __aux_require_boolean_expr<bool>(bool const&);
5097403Sobrien
5197403Sobrien  _Instantiate(_ConvertibleConcept<unsigned, unsigned> );
5297403Sobrien
5397403Sobrien  _Instantiate(_InputIteratorConcept<char*> );
5497403Sobrien
5597403Sobrien  _Instantiate(_InputIteratorConcept<char const*> );
5697403Sobrien
57132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
5897403Sobrien  _Instantiate(_InputIteratorConcept<wchar_t*> );
5997403Sobrien
6097403Sobrien  _Instantiate(_InputIteratorConcept<wchar_t const*> );
6197403Sobrien
6297403Sobrien  _Instantiate(_LessThanComparableConcept<wchar_t*> );
6397403Sobrien#endif
6497403Sobrien
6597403Sobrien  _Instantiate(_LessThanComparableConcept<char*> );
6697403Sobrien
6797403Sobrien  _Instantiate(_LessThanComparableConcept<int> );
6897403Sobrien
6997403Sobrien  _Instantiate(_LessThanComparableConcept<long> );
7097403Sobrien
7197403Sobrien  _Instantiate(_LessThanComparableConcept<long long> );
7297403Sobrien
7397403Sobrien  _Instantiate(_LessThanComparableConcept<unsigned> );
7497403Sobrien
7597403Sobrien  _Instantiate(_OutputIteratorConcept<std::ostreambuf_iterator<
7697403Sobrien    char, std::char_traits<char> >, char> );
7797403Sobrien
78132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
7997403Sobrien  _Instantiate(_OutputIteratorConcept<std::ostreambuf_iterator<
8097403Sobrien    wchar_t, std::char_traits<wchar_t> >, wchar_t> );
8197403Sobrien#endif
8297403Sobrien
8397403Sobrien  _Instantiate(_RandomAccessIteratorConcept<char*> );
8497403Sobrien
8597403Sobrien  _Instantiate(_RandomAccessIteratorConcept<char const*> );
8697403Sobrien
8797403Sobrien  _Instantiate(_RandomAccessIteratorConcept<
8897403Sobrien    __normal_iterator<char const*, std::string> > );
8997403Sobrien
9097403Sobrien  _Instantiate(_RandomAccessIteratorConcept<
9197403Sobrien    __normal_iterator<char*, std::string> > );
9297403Sobrien
93132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
9497403Sobrien  _Instantiate(_RandomAccessIteratorConcept<
9597403Sobrien    __normal_iterator<wchar_t const*,
9697403Sobrien    std::basic_string<wchar_t, std::char_traits<wchar_t>,
9797403Sobrien                               std::allocator<wchar_t> > > > );
9897403Sobrien
9997403Sobrien  _Instantiate(_RandomAccessIteratorConcept<
10097403Sobrien    __normal_iterator<wchar_t*,
10197403Sobrien    std::basic_string<wchar_t, std::char_traits<wchar_t>,
10297403Sobrien                               std::allocator<wchar_t> > > > );
10397403Sobrien
10497403Sobrien  _Instantiate(_RandomAccessIteratorConcept<wchar_t*> );
10597403Sobrien
10697403Sobrien  _Instantiate(_RandomAccessIteratorConcept<wchar_t const*> );
10797403Sobrien#endif
10897403Sobrien
109169691Skan_GLIBCXX_END_NAMESPACE
110169691Skan
11197403Sobrien#undef _Instantiate
11297403Sobrien
11397403Sobrien#endif
114