¿Está `esto` permitido dentro de una especificación de excepción?
Tengo un código que requiere que use*this
, pero quiero que no sea menos amigable:
struct foo;
// Would actually be something with conditional noexcept
void do_something(foo&);
struct foo {
void fn()
noexcept(noexcept(::do_something(*this)))
{
::do_something(*this);
}
};
Sin embargo,gcc rechaza esta:
<source>:7:43: error: invalid use of 'this' at top level
noexcept(noexcept(::do_something(*this)))
Si solo accedo a un miembro, gcc está bien:
void do_something(int);
struct bar {
int x;
void fn()
noexcept(noexcept(::do_something(x)))
{
::do_something(x);
}
};
Sin embargo, si accedo al miembro a través dethis
puntero,gcc se queja de nuevo:
struct baz {
int x;
void fn()
noexcept(noexcept(::do_something(this->x)))
{
::do_something(this->x);
}
};
Diagnóstico
<source>:7:42: error: invalid use of 'this' at top level
noexcept(noexcept(::do_something(this->x)))
Cada otro compilador probé acepta conthis
dentro de la especificación noexcept, pero en realidad no sé si es gcc el que tiene el error o todos los demás compiladores.
Puede la palabra clavethis
ser utilizado dentro de una especificación noexcept?