1a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant//===----------------------------------------------------------------------===// 2a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// 3a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// The LLVM Compiler Infrastructure 4a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// 5a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 7a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// 8a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant//===----------------------------------------------------------------------===// 9a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant 10a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant// test get_unexpected 11a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant 12a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant#include <exception> 13a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant#include <cassert> 14a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant#include <cstdlib> 15a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant 16a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnantvoid f1() {} 17a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnantvoid f2() {} 18a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant 19a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnantvoid f3() 20a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant{ 21a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant std::exit(0); 22a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant} 23a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant 24a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnantint main() 25a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant{ 26a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant 27a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant std::unexpected_handler old = std::get_unexpected(); 28a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant // verify there is a previous unexpected handler 29a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant assert(old); 30a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant std::set_unexpected(f1); 31a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant assert(std::get_unexpected() == f1); 32a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant // verify f1 was replace with f2 33a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant std::set_unexpected(f2); 34a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant assert(std::get_unexpected() == f2); 35a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant // verify calling original unexpected handler calls terminate 36a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant std::set_terminate(f3); 37a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant (*old)(); 38a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant assert(0); 39a445151f4a1a9abf852cd7b84d6328687bb3294cHoward Hinnant} 40