/***************************************************************************
 *
 * 27.forward.cpp - exercises lib.iostream.forward
 *
 * $Id$
 *
 ***************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you under  the Apache
 * License, Version  2.0 (the  "License"); you may  not use  this file
 * except in  compliance with the License.   You may obtain  a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the  License is distributed on an  "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
 * implied.   See  the License  for  the  specific language  governing
 * permissions and limitations under the License.
 *
 * Copyright 1994-2005 Rogue Wave Software.
 * 
 **************************************************************************/

#include <iosfwd>

// IMPORTANT: do not #include any other header before the declarations
//            below in order not to accidentally bring in any missing
//            definitions from the #included header

#ifndef _RWSTD_NO_NAMESPACE
#  define std std
#else
#  define std
#endif   // _RWSTD_NO_NAMESPACE

typedef char C;

typedef std::char_traits<C>                          ctraits;
typedef std::allocator<C>                            calloc;

typedef std::basic_ios<C, ctraits>                   C_basic_ios;
typedef std::basic_streambuf<C, ctraits>             C_basic_streambuf;
typedef std::basic_istream<C, ctraits>               C_basic_istream;
typedef std::basic_ostream<C, ctraits>               C_basic_ostream;
typedef std::basic_iostream<C, ctraits>              C_basic_iostream;
typedef std::basic_stringbuf<C, ctraits, calloc>     C_basic_stringbuf;
typedef std::basic_istringstream<C, ctraits, calloc> C_basic_istringstream;
typedef std::basic_ostringstream<C, ctraits, calloc> C_basic_ostringstream;
typedef std::basic_stringstream<C, ctraits, calloc>  C_basic_stringstream;

typedef std::basic_filebuf<C, ctraits>               C_basic_filebuf;
typedef std::basic_ifstream<C, ctraits>              C_basic_ifstream;
typedef std::basic_ofstream<C, ctraits>              C_basic_ofstream;
typedef std::basic_fstream<C, ctraits>               C_basic_fstream;

typedef std::istreambuf_iterator<C, ctraits>         C_istreambuf_iterator;
typedef std::ostreambuf_iterator<C, ctraits>         C_ostreambuf_iterator;

#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES

// make sure that default template arguments are specified

typedef std::basic_ios<C>           C_X_basic_ios;
typedef std::basic_streambuf<C>     C_X_basic_streambuf;
typedef std::basic_istream<C>       C_X_basic_istream;
typedef std::basic_ostream<C>       C_X_basic_ostream;
typedef std::basic_iostream<C>      C_X_basic_iostream;
typedef std::basic_stringbuf<C>     C_X_basic_stringbuf;
typedef std::basic_istringstream<C> C_X_basic_istringstream;
typedef std::basic_ostringstream<C> C_X_basic_ostringstream;
typedef std::basic_stringstream<C>  C_X_basic_stringstream;

typedef std::basic_filebuf<C>       C_X_basic_filebuf;
typedef std::basic_ifstream<C>      C_X_basic_ifstream;
typedef std::basic_ofstream<C>      C_X_basic_ofstream;
typedef std::basic_fstream<C>       C_X_basic_fstream;

typedef std::istreambuf_iterator<C> C_X_istreambuf_iterator;
typedef std::ostreambuf_iterator<C> C_X_ostreambuf_iterator;

#endif   // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES

typedef std::fpos<C>       C_fpos;

// test whether all required typedefs are defined
typedef std::ios           C_ios;
typedef std::streambuf     C_streambuf;
typedef std::istream       C_istream;
typedef std::ostream       C_ostream;
typedef std::iostream      C_iostream;
typedef std::stringbuf     C_stringbuf;
typedef std::istringstream C_istringstream;
typedef std::ostringstream C_ostringstream;
typedef std::stringstream  C_stringstream;
typedef std::filebuf       C_filebuf;
typedef std::ifstream      C_ifstream;
typedef std::ofstream      C_ofstream;
typedef std::fstream       C_fstream;

typedef std::streampos     C_streampos;


#ifndef _RWSTD_NO_WCHAR_T

typedef std::wios           W_wios;
typedef std::wstreambuf     W_wstreambuf;
typedef std::wistream       W_wistream;
typedef std::wostream       W_wostream;
typedef std::wiostream      W_wiostream;
typedef std::wstringbuf     W_wstringbuf;
typedef std::wistringstream W_wistringstream;
typedef std::wostringstream W_wostringstream;
typedef std::wstringstream  W_wstringstream;
typedef std::wfilebuf       W_wfilebuf;
typedef std::wifstream      W_wifstream;
typedef std::wofstream      W_wofstream;
typedef std::wfstream       W_wfstream;

typedef std::wstreampos     W_wstreampos;

#endif   // _RWSTD_NO_WCHAR_T

/**************************************************************************/

#include <rw_driver.h>

/**************************************************************************/

#ifndef _RWSTD_NO_PART_SPEC_OVERLOAD

template <class T, class U>
bool is_same_type (const T*, const U*) { return false; }

template <class T>
bool is_same_type (const T*, const T*) { return true; }

#else   // ifdef _RWSTD_NO_PART_SPEC_OVERLOAD

template <class T, class U>
struct is_same
{
    struct yes {};
    struct no { yes no_ [2]; };
    template <class T>
    struct Type {};

    static yes test (Type<T>, Type<T>);
    static no test (...);

    enum { value = sizeof (test (Type<T> (), Type<U> ())) == sizeof (yes) };
};

template <class T, class U>
bool is_same_type (const T*, const U*) { return is_same<T, U>::value; }

#endif  // _RWSTD_NO_PART_SPEC_OVERLOAD

/**************************************************************************/

static int
run_test (int, char*[])
{
#define TEST_TYPE(T)                                                    \
    rw_assert (is_same_type ((C_X_ ## T*)0, (C_ ## T*)0), 0, __LINE__,  \
               "%s", #T);

    // check that default arguments are correct
    TEST_TYPE (basic_ios);
    TEST_TYPE (basic_streambuf);
    TEST_TYPE (basic_istream);
    TEST_TYPE (basic_ostream);
    TEST_TYPE (basic_iostream);
    TEST_TYPE (basic_stringbuf);
    TEST_TYPE (basic_istringstream);
    TEST_TYPE (basic_ostringstream);
    TEST_TYPE (basic_stringstream);

    TEST_TYPE (basic_filebuf);
    TEST_TYPE (basic_ifstream);
    TEST_TYPE (basic_ofstream);
    TEST_TYPE (basic_fstream);

    TEST_TYPE (istreambuf_iterator);
    TEST_TYPE (ostreambuf_iterator);


#define TEST_TYPEDEF(T, U)                                      \
    rw_assert (is_same_type ((T*)0, (U*)0), 0, __LINE__,        \
               "%s == %s", #T, #U);

    // check that typedefs are correctly defined
    TEST_TYPEDEF (std::ios,           C_ios);
    TEST_TYPEDEF (std::streambuf,     C_streambuf);
    TEST_TYPEDEF (std::istream,       C_istream);
    TEST_TYPEDEF (std::ostream,       C_ostream);
    TEST_TYPEDEF (std::iostream,      C_iostream);
    TEST_TYPEDEF (std::stringbuf,     C_stringbuf);
    TEST_TYPEDEF (std::istringstream, C_istringstream);
    TEST_TYPEDEF (std::ostringstream, C_ostringstream);
    TEST_TYPEDEF (std::stringstream,  C_stringstream);
    TEST_TYPEDEF (std::filebuf,       C_filebuf);
    TEST_TYPEDEF (std::ifstream,      C_ifstream);
    TEST_TYPEDEF (std::ofstream,      C_ofstream);
    TEST_TYPEDEF (std::fstream,       C_fstream);

#ifndef _RWSTD_NO_WCHAR_T

    TEST_TYPEDEF (std::wios,           W_wios);
    TEST_TYPEDEF (std::wstreambuf,     W_wstreambuf);
    TEST_TYPEDEF (std::wistream,       W_wistream);
    TEST_TYPEDEF (std::wostream,       W_wostream);
    TEST_TYPEDEF (std::wiostream,      W_wiostream);
    TEST_TYPEDEF (std::wstringbuf,     W_wstringbuf);
    TEST_TYPEDEF (std::wistringstream, W_wistringstream);
    TEST_TYPEDEF (std::wostringstream, W_wostringstream);
    TEST_TYPEDEF (std::wstringstream,  W_wstringstream);
    TEST_TYPEDEF (std::wfilebuf,       W_wfilebuf);
    TEST_TYPEDEF (std::wifstream,      W_wifstream);
    TEST_TYPEDEF (std::wofstream,      W_wofstream);
    TEST_TYPEDEF (std::wfstream,       W_wfstream);
    TEST_TYPEDEF (std::wstreampos,     std::streampos);

#endif   // _RWSTD_NO_WCHAR_T

    return 0;
}

/**************************************************************************/

int main (int argc, char *argv[])
{
    return rw_test (argc, argv, __FILE__,
                    "lib.iostream.forward",
                    0,   // no comment
                    run_test,
                    "",
                    0);
}
