1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // XFAIL: libcpp-no-exceptions 11 // <string> 12 13 // const_reference at(size_type pos) const; 14 // reference at(size_type pos); 15 16 #include <string> 17 #include <stdexcept> 18 #include <cassert> 19 20 #include "min_allocator.h" 21 22 template <class S> 23 void 24 test(S s, typename S::size_type pos) 25 { 26 try 27 { 28 const S& cs = s; 29 assert(s.at(pos) == s[pos]); 30 assert(cs.at(pos) == cs[pos]); 31 assert(pos < cs.size()); 32 } 33 catch (std::out_of_range&) 34 { 35 assert(pos >= s.size()); 36 } 37 } 38 39 int main() 40 { 41 { 42 typedef std::string S; 43 test(S(), 0); 44 test(S("123"), 0); 45 test(S("123"), 1); 46 test(S("123"), 2); 47 test(S("123"), 3); 48 } 49 #if TEST_STD_VER >= 11 50 { 51 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 52 test(S(), 0); 53 test(S("123"), 0); 54 test(S("123"), 1); 55 test(S("123"), 2); 56 test(S("123"), 3); 57 } 58 #endif 59 } 60