https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86105

--- Comment #1 from Johel Ernesto Guerrero Peña <johelegp at gmail dot com> ---
Denoised: https://godbolt.org/z/87fbMG6f5.
```C++
template<class To, class From> concept is_static_castable = requires(From &&
(*from)()) { static_cast<To>(from()); };

struct B { };
struct D : B { };
struct D2 : D, B { };
struct D3 : private B { };

void f() {
  D2 d2;
  (void)static_cast<B&&>(d2);                      // error: invalid
  static_assert(not is_static_castable<B&&, D2&>); // says "is valid"
  D3 d3;
  (void)static_cast<B&&>(d3);                      // error: invalid
  static_assert(not is_static_castable<B&&, D3&>); // says "is valid"
}
```
```
<source>:5:8: warning: direct base 'B' inaccessible in 'D2' due to ambiguity
[-Winaccessible-base]
    5 | struct D2 : D, B { };
      |        ^~
<source>: In function 'void f()':
<source>:10:28: error: 'B' is an ambiguous base of 'D2'
   10 |   (void)static_cast<B&&>(d2);                      // error: invalid
      |                            ^
<source>:11:17: error: static assertion failed
   11 |   static_assert(not is_static_castable<B&&, D2&>); // says "is valid"
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:13:28: error: 'B' is an inaccessible base of 'D3'
   13 |   (void)static_cast<B&&>(d3);                      // error: invalid
      |                            ^
<source>:14:17: error: static assertion failed
   14 |   static_assert(not is_static_castable<B&&, D3&>); // says "is valid"
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Compiler returned: 1
```

Reply via email to