Следующая программа ...
int main()
{
int{1}.~int();
}
не компилируется на (см. средство просмотра соответствия):
clang ++ магистраль с
-std=c++1z
ствол g ++ с
-std=c++1z
CL 19 2017
Представляем псевдоним типа для _4 _...
int main()
{
using X = int;
int{1}.~X();
}
... делает программу действительной на всех ранее упомянутых компиляторах без предупреждений (см. средство просмотра соответствия) .
Почему при вызове деструктора int
требуется псевдоним типа? Это потому, что int
не является допустимым элементом грамматики для вызова уничтожения?
std::optional
), но этот вопрос был создан исключительно из любопытства. - person Vittorio Romeo   schedule 26.09.2017t.~T()
работает в шаблоне, заботясь об общих контекстах. Не могу сказать, что могу придумать ситуацию, в которой я хотел бы использоватьint
напрямую. - person chris   schedule 26.09.2017