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;
}
To my surprise, the above program compiles and links with Visual Studio 2015 Update 3. I like the idea of allowing alias to be used for explicit template instantiation, but it doesn't seem to work with gcc or clang.
Is it a feature of the forthcoming standard or something specific of VS?