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 // <string> 11 12 // const_reference at(size_type pos) const; 13 // reference at(size_type pos); 14 15 #include <string> 16 #include <stdexcept> 17 #include <cassert> 18 19 #include "min_allocator.h" 20 21 template <class S> 22 void 23 test(S s, typename S::size_type pos) 24 { 25 try 26 { 27 const S& cs = s; 28 assert(s.at(pos) == s[pos]); 29 assert(cs.at(pos) == cs[pos]); 30 assert(pos < cs.size()); 31 } 32 catch (std::out_of_range&) 33 { 34 assert(pos >= s.size()); 35 } 36 } 37 38 int main() 39 { 40 { 41 typedef std::string S; 42 test(S(), 0); 43 test(S("123"), 0); 44 test(S("123"), 1); 45 test(S("123"), 2); 46 test(S("123"), 3); 47 } 48 #if __cplusplus >= 201103L 49 { 50 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 51 test(S(), 0); 52 test(S("123"), 0); 53 test(S("123"), 1); 54 test(S("123"), 2); 55 test(S("123"), 3); 56 } 57 #endif 58 } 59