@Justin Я искал "это не исключение" :)
я есть код, который требует от меня использовать*this
, но я хочу, чтобы это было не иначе как дружелюбно
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);
}
};
Тем не мение,GCC отклоняет это:
<source>:7:43: error: invalid use of 'this' at top level
noexcept(noexcept(::do_something(*this)))
Если я просто получаю доступ к члену, gcc в порядке:
void do_something(int);
struct bar {
int x;
void fn()
noexcept(noexcept(::do_something(x)))
{
::do_something(x);
}
};
Однако, если я получу доступ к члену черезthis
указатель,GCC снова жалуется:
struct baz {
int x;
void fn()
noexcept(noexcept(::do_something(this->x)))
{
::do_something(this->x);
}
};
Диагностика:
<source>:7:42: error: invalid use of 'this' at top level
noexcept(noexcept(::do_something(this->x)))
Любой другой компилятор, который я пробовалпринимает использованиеthis
внутри спецификации noexcept, но я на самом деле не знаю, есть ли ошибка в gcc или во всех других компиляторах.
Может ключевое словоthis
использоваться внутри спецификации noexcept?