header.hЯвный экземпляр шаблона с использованием псевдонима?
template <int>
class FiniteElement
{
public:
int GetDOF();
};
using FiniteElement2D= FiniteElement<3>;
using FiniteElement3D= FiniteElement<6>;
Source.cpp
#include "Header.h"
//template class FiniteElement<3>;
//template class FiniteElement<6>;
template FiniteElement2D; // Using alias for explicit template instantiation !!!
template FiniteElement3D;
template <int DOF>
int FiniteElement<DOF>::GetDOF()
{ return DOF; }
main.cpp
#include "Header.h"
#include <iostream>
int main()
{
FiniteElement3D Elem;
std::cout << Elem.GetDOF();
return 0;
}
К моему удивлению, выше программа компилируется и ссылки с видео Обновление Studio 2015 3. Мне нравится идея разрешить псевдоним использоваться для явного создания экземпляра шаблона, но, похоже, он не работает с gcc или clang.
Является ли это признаком предстоящего стандарта или чего-то конкретного ВС?
Это не связано с текущим Clang/C2 (июль 2016 года), но по-прежнему связано с сегодняшней ежедневной сборкой (v19.10.24606). Пожалуйста, [укажите отчет об ошибке] (https://connect.microsoft.com/VisualStudio/) и разместите здесь ссылку. – ildjarn
@GuillaumeRacicot В ретроспективе легко назвать «глупым» то, что сейчас ясно, было плохим дизайнерским решением. https://blogs.msdn.microsoft.com/vcblog/2015/09/25/rejuvenating-the-microsoft-cc-compiler/ Да, VS еще не соответствует требованиям, да, все другие основные компиляторы полностью соответствуют C + +14. Но вы должны отдать должное им за то, что они владеют и идут (медленно) в правильном направлении: https://blogs.msdn.microsoft.com/vcblog/2016/06/07/expression-sfinae-improvements-in-vs- 2015-update-3 /. Они (и мы как пользователи) платят за ошибку, сделанную давно - **, которая выглядела прямо в это время **. – bolov
@bolov да, вы правы. Я думаю, что на сегодня у меня есть ошибка VS ... –