1// 2004-03-02  Petur Runolfsson  <peturr02@ru.is>
2
3// Copyright (C) 2004-2015 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20// 27.4.3 fpos
21
22// { dg-do run }
23
24#include <typeinfo>
25#include <limits>
26#include <iterator>
27#include <testsuite_hooks.h>
28
29// libstdc++/14320
30void test01()
31{
32  using namespace std;
33  bool test __attribute__((unused)) = true;
34
35  typedef istreambuf_iterator<char>::difference_type Distance;
36
37  bool found = false;
38  // The C++ standard didn't originally have "long long", however that
39  // type will be in the C++0x standard and testing for it allows
40  // ilp32 targets to pass this test when `Distance' is 64 bits.
41  if (typeid(Distance) == typeid(long long int))
42    found = true;
43  if (typeid(Distance) == typeid(long int))
44    found = true;
45  if (typeid(Distance) == typeid(int))
46    found = true;
47  if (typeid(Distance) == typeid(short int))
48    found = true;
49  if (typeid(Distance) == typeid(signed char))
50    found = true;
51  if (numeric_limits<char>::is_signed &&
52      typeid(Distance) == typeid(char))
53    found = true;
54  if (numeric_limits<wchar_t>::is_signed &&
55      typeid(Distance) == typeid(wchar_t))
56    found = true;
57
58  VERIFY( found );
59}
60
61int main()
62{
63  test01();
64  return 0;
65}
66