【发布时间】:2019-01-09 10:54:34
【问题描述】:
请看以下代码:
struct base {};
template <class T>
struct derived : T {
using base_type = T;
using base_type::T;
};
int main()
{
derived<base> x;
}
GCC 接受此代码,但 Clang 和 MSVC 拒绝它。谁是对的,为什么?
【问题讨论】:
-
我不知道。但如果这个 bug 鼓励你写得更清楚
using base_type::base_type;或using T::T;,我赞成。 -
@alfC 可笑的是,我确实写了(并且总是写)
using base_type::base_type。以上代码是nvidia CUDA编译器(NVCC)生成的翻译。我不知道为什么 NVCC 将base_type::base_type翻译成base_type::T,但这就是我遇到这个问题的方式。 -
很高兴知道。也许有一种方法可以强制 nvcc 不更改代码的某些部分。
标签: c++ c++11 language-lawyer inheriting-constructors