【发布时间】:2019-09-20 17:14:20
【问题描述】:
我正在将我之前为 clang 和 gcc 编写的库转换为 MSVC,我遇到了我认为必须是错误的问题,但我对标准的了解不够当然。
以下代码会产生关于未声明标识符和无效默认参数的错误:
template <class T>
struct dummy_struct {};
template <class T>
using dummy_alias = dummy_struct<T>;
template <template <class> class Thing>
struct foo {
template <template <class> class T = Thing>
void bar() {}
};
int main() {
foo<dummy_alias> fdsa;
fdsa.bar();
}
error C3202: 'Thing': invalid default argument, expected a class template
note: see reference to class template instantiation 'foo<dummy_alias>' being compiled
error C2065: 'Thing': undeclared identifier
这是上面示例的编译器资源管理器链接:https://godbolt.org/z/e2SEpD
问题的根源似乎是 MSVC 不习惯将别名模板用作模板模板参数。
我认为这一定是一个错误,但我认为在我提交报告之前,我应该由可能更熟悉该标准的人运行它。 提前致谢!
为了澄清,这段代码在最新版本的 gcc、clang 和 icc 上编译没有问题。
【问题讨论】:
-
最好在问题中包含实际的错误消息。
-
我已更新问题以包含错误消息,感谢您的建议!
标签: c++ visual-c++ compiler-errors language-lawyer