value_const.pass.cpp revision 0cdbe6048173c1f05628dbc85430acf191a3e173
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//===----------------------------------------------------------------------===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <optional> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// constexpr const T& optional<T>::value() const; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <experimental/optional> 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <type_traits> 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if _LIBCPP_STD_VER > 11 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::experimental::optional; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::experimental::in_place_t; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::experimental::in_place; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::experimental::bad_optional_access; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct X 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles){ 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X() = default; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X(const X&) = delete; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) constexpr int test() const {return 3;} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int test() {return 4;} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif // _LIBCPP_STD_VER > 11 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main() 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if _LIBCPP_STD_VER > 11 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) constexpr optional<X> opt(in_place); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_assert(opt.value().test() == 3, ""); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const optional<X> opt(in_place); 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) assert(opt.value().test() == 3); 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) { 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const optional<X> opt; 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) try 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opt.value(); 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) assert(false); 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) catch (const bad_optional_access&) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // _LIBCPP_STD_VER > 11 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)