Вызов псевдо-деструктора с ключевым словом шаблона

Следующий код не компилируется с лязг 5.0.0 (флаги компиляции -std=c++14 -Wall -Wextra -Werror -pedantic-errors -O0):

struct foo
{
};

int main()
{
foo f;

f.~decltype(f)();          // OK
f.template ~decltype(f)(); // OK

int i{};

i.~decltype(i)();          // OK
i.template ~decltype(i)(); // error: expected unqualified-id
}

Это способ заставить компиляцию псевдо-деструктора вызова с template ключевое слово?

3

Решение

Насколько я могу судить, [temp.names] / 5 запрещает оба этих .template … поиски:

Имя с префиксом шаблона ключевого слова должно быть идентификатором шаблона, или имя должно ссылаться на шаблон класса или шаблон псевдонима. [Примечание: шаблон ключевого слова нельзя применять к не шаблонным членам шаблонов классов. — конец примечания]

Ни одно из этих имен деструкторов не Шаблон-идентификаторs, и при этом они не обращаются к шаблонам классов или шаблонам псевдонимов. Тем не менее, возможно, что я что-то упустил.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector