| // { dg-do compile { target c++11 } } | |
| #include <type_traits> | |
| class S { | |
| operator int(); | |
| friend void g(); // #1 | |
| }; | |
| void | |
| g() | |
| { | |
| int i = 0; | |
| S s; | |
| i = s; // this works, because we're inside a friend. | |
| // But the traits are evaluated in "a context unrelated to either type". | |
| static_assert( ! std::is_assignable<int&, S>::value, "unfriendly"); | |
| #if __cplusplus >= 201703L | |
| static_assert( ! std::is_assignable_v<int&, S>, "unfriendly"); | |
| #endif | |
| } |