1
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 Update 3.我喜欢允许别名用于显式模板实例化的想法,但它似乎不适用于gcc或clang。
它是即将到来的标准的特征还是VS的特定特征?
这未能与当前的Clang/C2(2016年7月)链接,但仍与当今的每日构建(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错误负载... –