Viewing file: constexpr-try4.C (1.6 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/89513 // { dg-do compile { target c++14 } } // { dg-options "" }
constexpr int foo () try { // { dg-warning "function-try-block body of 'constexpr' function only available with" "" { target c++17_down } } int a = 1; for (int i = 0; i < 10; i++) a += i; return a; } catch (...) { return -1; }
constexpr int bar () try { // { dg-warning "function-try-block body of 'constexpr' function only available with" "" { target c++17_down } } int a = 0; for (int i = 0; i < 9; i++) try { // { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } } a += i; } catch (int) { return -1; } return a; } catch (...) { return -2; }
constexpr bool baz () { try { return true; } catch (...) { return false; } // { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } } }
struct S { constexpr S () try : m (1) // { dg-warning "function-try-block body of 'constexpr' constructor only available with" "" { target c++17_down } } { try { // { dg-warning "'try' in 'constexpr' function only available with" "" { target c++17_down } } m += 2; } catch (int) { m = -1; } } catch (...) { m = -2; } int m; constexpr int get () const { return m; } };
struct T { constexpr T () try { // { dg-warning "function-try-block body of 'constexpr' constructor only available with" "" { target c++17_down } } } catch (...) { } };
static_assert (foo () == 46, ""); static_assert (bar () == 36, ""); static_assert (baz (), ""); constexpr S s; static_assert (s.get () == 3, ""); constexpr T t;
|