1// { dg-options "-std=gnu++11" }
2// 2008-05-22  Paolo Carlini  <paolo.carlini@oracle.com>
3//
4// Copyright (C) 2008-2015 Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11//
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3.  If not see
19// <http://www.gnu.org/licenses/>.
20
21#include <unordered_map>
22#include <stdexcept>
23#include <testsuite_hooks.h>
24
25// DR 761. unordered_map needs an at() member function.
26void test01()
27{
28  bool test __attribute__((unused)) = true;
29  typedef std::unordered_map<int, double> map_type;
30
31  {
32    map_type m;
33    m[0] = 1.5;
34
35    double& rd = m.at(0);
36    VERIFY( rd == 1.5 );
37    try
38      {
39	m.at(1);
40      }
41    catch(std::out_of_range& obj)
42      {
43	// Expected.
44      }
45    catch(...)
46      {
47	// Failed.
48	throw;
49      }
50  }
51
52  {
53    map_type m;
54    m[1] = 2.5;
55    const map_type cm(m);
56
57    const double& crd = cm.at(1);
58    VERIFY( crd == 2.5 );
59    try
60      {
61	cm.at(0);
62      }
63    catch(std::out_of_range& obj)
64      {
65	// Expected.
66      }
67    catch(...)
68      {
69	// Failed.
70	throw;
71      }
72  }
73}
74
75int main()
76{
77  test01();
78  return 0;
79}
80