https://gcc.gnu.org/projects/cxx-status.html
,g++版本7,与标志一起使用
-std=c++1z
我希望编译以下代码,尤其是作为
Base
是一个抽象类,因此:
编译器不知道
可以创建;
2、指向基的指针
pt_base
Derived<int>{42}
)其中类型(
int
template<typename ValueType>
class Base {
public:
virtual ValueType getValue() = 0;
};
template<typename ValueType>
class Derived : public Base<ValueType>{
public:
Derived(ValueType argt){ value = argt; }
virtual ValueType getValue(){ return value; }
ValueType value;
};
int main(){
Base *pt_base = new(Derived<int>{42}); // *ERROR*
delete pt_base;
}
然而,它
does not compile
模板占位符类型“Base”后面必须跟一个简单的声明器id
很遗憾,因为我想动态地决定哪个派生类
Derived<someType>
或来自课堂
Derived2<someType2>
vector<Base *>
可以存储指向各种派生类的对象的指针。
GCC只有
experimental support
对于C++17,我没有访问另一个编译器的权限,所以尽管我得到了一个编译错误,但我不确定我的代码是错的。你怎么认为?
我们怎么能动态地决定呢
或
衍生2<某些类型2>