Следующий код не компилируется с лязг 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
ключевое слово?
Насколько я могу судить, [temp.names] / 5 запрещает оба этих .template …
поиски:
Имя с префиксом шаблона ключевого слова должно быть идентификатором шаблона, или имя должно ссылаться на шаблон класса или шаблон псевдонима. [Примечание: шаблон ключевого слова нельзя применять к не шаблонным членам шаблонов классов. — конец примечания]
Ни одно из этих имен деструкторов не Шаблон-идентификаторs, и при этом они не обращаются к шаблонам классов или шаблонам псевдонимов. Тем не менее, возможно, что я что-то упустил.
Других решений пока нет …