gpt4 book ai didi

c++ - 类数据成员指针的非类型模板参数包不能用gcc编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:24 26 4
gpt4 key购买 nike

我尝试用 c++17 编写代码 auto类数据成员指针的非类型模板参数包,但是下面的代码clang会编译而gcc不会,you can see godbolt for error message ,有人可以告诉我我应该相信哪一个,因为我不明白为什么 gcc 拒绝这个。

谢谢你的帮助。

template <
typename B,
template <auto B::*...> typename Wrapper,
auto B::*... Args
>
void f(Wrapper<Args...>) {}

template <auto... Args> struct Wrapper {};
struct A { int i; float f; };

// gcc error: unable to deduce 'auto B::*' from '&A::i'
f(Wrapper<&A::i, &A::f>{});

我知道如果改变<auto B::*...><auto...>然后两者都可以编译,但我想知道 为什么 gcc 无法推断出正确的类型,因为以下 non-auto 模板参数得到相同的情况:gcc 无法编译和 clang可以:

template <
typename B,
typename... MT,
template <MT B::*...> class Wrapper,
MT B::*... Args
>
void f(Wrapper<Args...>) {}

最佳答案

尝试

template <
template <auto ...> typename Wrapper,
auto ... Args
>
void f(Wrapper<Args...>) {}

autoB::* 的替代品;所以你应该使用 auto B::*,不能同时使用。

关于c++ - 类数据成员指针的非类型模板参数包不能用gcc编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57670569/

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