1a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant//===----------------------------------------------------------------------===// 2a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// 3a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// The LLVM Compiler Infrastructure 4a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// 8a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant//===----------------------------------------------------------------------===// 9a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 10a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// <string> 11a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 12a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// long double stold(const string& str, size_t *idx = 0); 13a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// long double stold(const wstring& str, size_t *idx = 0); 14a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 15a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <iostream> 16a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 17a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <string> 18a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <cmath> 19a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <cassert> 20a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 21a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnantint main() 22a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant{ 23a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("0") == 0); 24a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"0") == 0); 25a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("-0") == 0); 26a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"-0") == 0); 27a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("-10") == -10); 28a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"-10.5") == -10.5); 29a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(" 10") == 10); 30a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L" 10") == 10); 31a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant size_t idx = 0; 32a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("10g", &idx) == 10); 33a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 34a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 35a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"10g", &idx) == 10); 36a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 37a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 38a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 39a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("1.e60", &idx) == 1.e60L); 40a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 5); 41a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 42a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 43a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 44a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 45a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 46a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 47a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 48a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"1.e60", &idx) == 1.e60L); 49a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 5); 50a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 51a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 52a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 53a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 54a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 55a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 56a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 57a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 58a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("1.e6000", &idx) == INFINITY); 59a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 60a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 61a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 62a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 63a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 64a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 65a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 66a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 67a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"1.e6000", &idx) == INFINITY); 68a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 69a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 70a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 71a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 72a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 73a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 74a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 75a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 76a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("INF", &idx) == INFINITY); 77a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 78a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 79a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 80a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 81a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 82a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 83a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 84a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 85a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 86a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"INF", &idx) == INFINITY); 87a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 88a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 89a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 90a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 91a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 92a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 93a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 94a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 95a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 96a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::isnan(std::stold("NAN", &idx))); 97a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 98a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 99a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 100a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 101a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 102a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 103a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 104a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 105a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 106a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::isnan(std::stold(L"NAN", &idx))); 107a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 108a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 109a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 110a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 111a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 112a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 113a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 114a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 115a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 116a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold("", &idx); 117a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 118a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 119a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 120a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 121a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 122a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 123a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 124a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 125a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(L"", &idx); 126a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 127a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 128a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 129a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 130a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 131a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 132a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 133a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 134a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(" - 8", &idx); 135a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 136a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 137a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 138a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 139a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 140a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 141a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 142a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 143a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(L" - 8", &idx); 144a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 145a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 146a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 147a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 148a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 149a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 150a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 151a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 152a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold("a1", &idx); 153a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 154a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 155a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 156a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 157a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 158a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 159a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 160a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 161a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(L"a1", &idx); 162a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 163a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 164a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 165a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 166a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 167a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 168a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant} 169