c++ - 如何使用clang修复参数 'args'上缺少的默认参数?

标签 c++

我有一个简短且方便的多维 vector 代码,可以在初始化期间选择大小和默认值。

#include <iostream>
#include <vector>
using std::vector;

template<int D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
    static_assert(D >= 1, "Vector dimension must be greater than zero!");
    template<typename... Args>
    Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};
template<typename T>
struct Vec<1, T> : public vector<T> {
    Vec(int n = 0, const T& val = T()) : vector<T>(n, val) {}
};

int main() {
    int nbRow, nbCol;
    std::cin >> nbRow >> nbCol;
    Vec<2, int> grid(nbRow, nbCol, 0);
}
它适用于GCC,但不适用于clang 10.0.0(标准c++ 17或gnu ++ 17,两者均不起作用)。
main.cpp:15:25: error: missing default argument on parameter 'args'
        Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
                               ^
main.cpp:30:14: note: in instantiation of function template specialization 'Vec<2, int>::Vec<int, int>' requested here
        Vec<2, int> grid(nbRow, nbCol, 7);
                    ^
main.cpp:15:25: error: missing default argument on parameter 'args'
        Vec(int n = 0, Args... args) : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
有简单的方法可以解决此问题吗?提前致谢!

最佳答案

int n = 0带有默认值的参数后不能跟没有默认值的参数。删除=0

关于c++ - 如何使用clang修复参数 'args'上缺少的默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62783538/

相关文章:

c++ - 将通过引用传递的值分配给成员变量(在 C++ 中)

c++ - 如何删除字符串 vector 中的字符?

c++ - 将换行符插入输出流

c++ - 我如何使用 gcc 的内联报告 (-Winline)

c++ - 在 vb.net 中通过引用传递 const 参数

c++ - 在 C++ 中使用 fstream 读取和追加文件

c++ - CRC32 C 或 C++ 实现

c++ - 为什么在这些折叠表达式中使用 std::min 是未定义的行为?

c++ - 一个得到良好支持的 c++ union 的替代方案?

c++ - __cxa_pure_virtual 的目的是什么?