gpt4 book ai didi

c++ - 使用 C++17 扩展 using 声明的问题

转载 作者:行者123 更新时间:2023-11-28 01:18:12 24 4
gpt4 key购买 nike

我试图通过 C++17 中的包扩展了解一些新的可能性,但遇到了一个我不明白的问题。我创建了一个派生类,它继承自一组基类模板。

然后我尝试将所有基类构造函数导入 并添加一个访问基类常量的方法。但是,当我尝试编译时出现以下错误。

error: expected primary-expression before '...' token    23 |      
return mValue == Base<M, tuple_element_t<Is, Tuple>...>::value

如果我注释基类构造函数的导入或注释方法,编译工作会发现。有什么东西阻止我同时拥有这两者吗?

这是一个最小的例子:

#include <tuple>
#include <utility>
using namespace std;

template <size_t N, typename... Types>
struct Base
{
static constexpr size_t value = N;
};

template <typename Tuple, typename Indices>
struct Derived;

template <typename Tuple, size_t... Is>
struct Derived<Tuple, index_sequence<Is...>> : public Base<Is, std::tuple_element_t<Is,Tuple>... >...
{
// Works if following line is commented
using Base<Is, tuple_element_t<Is, Tuple>...>::Base...;

template<size_t M> bool check() const
{
return mValue == Base<M, tuple_element_t<Is, Tuple>...>::value;
}

size_t mValue;
};

template <typename... Types>
struct Test : public Derived<tuple<Types...>, make_index_sequence<sizeof...(Types)>>
{};

int main ()
{
using MyType = Test<int, float, float>;
MyType test;

return 0;
}

最佳答案

这是 gcc bug 79094 .该程序格式正确,clang 和 icc 接受它。

msvc 接受 gcc 错误报告中的简单版本,但拒绝这个稍微复杂的版本(与您的示例更相似):

template <typename>
class U { };

template <class... Args>
struct X : U<Args>...
{
using U<Args>::U...;
};

关于c++ - 使用 C++17 扩展 using 声明的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com