У меня есть некоторый код, который требует от меня использования *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?