程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ADL 无法找到友元函数 GCC 10.2.0大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ADL 无法找到友元函数 GCC 10.2.0

开发过程中遇到ADL 无法找到友元函数 GCC 10.2.0的问题如何解决?下面主要结合日常开发的经验,给出你关于ADL 无法找到友元函数 GCC 10.2.0的解决方法建议,希望对你解决ADL 无法找到友元函数 GCC 10.2.0有所启发或帮助;

我遇到了 ADL 无法找到隐藏朋友的问题。我正在开发一个 c++20 代码库,该代码库可以在最新版本的 msvc 上运行,但是我将它移回了一点,并让它在 arch linux 上使用 gcc 10.2.0 进行编译。有一些孤立的地方抱怨这些隐藏的朋友超出了范围,所以看起来确实有一些我缺少的编译器标志而不是代码中的错误,特别是因为它确实在 MSVC 和 C++ 上编译gcc 的兼容性图表似乎没有缺少任何必需的功能。

我已将以下内容添加到 cmake 中,以尝试确保禁用 GNU 扩展并启用 c++20 标准。

set_target_propertIEs(ttauri PROPERTIES
    CXX_STANDARD 20
    CXX_STANDARD_@R_450_10613@ired ON
    CXX_EXTENSIONS OFF
)
@H_696_8@

这是其中一个函数的示例。

    constexpr static ssize_t get_zero = -1;
    constexpr static ssize_t get_one = -2;

    template<ssize_t I>
    [[nodiscard]] frIEnd constexpr T &get(numeric_array &rhs) noexcept
    {
        static_assert(I >= 0 && I < N,"Index out of bounds");
        return get<I>(rhs.v); // v is a different class so its not the numeric_array get function
    }

    template<ssize_t I>
    [[nodiscard]] frIEnd constexpr T get(numeric_array &&rhs) noexcept
    {
        static_assert(I >= -2 && I < N,"Index out of bounds");
        if constexpr (I == get_zero) {
            return T{0};
        } else if constexpr (I == get_onE) {
            return T{1};
        } else {
            return get<I>(rhs.v); // v is a different class so its not the numeric_array get function
        }
    }

    template<ssize_t I>
    [[nodiscard]] frIEnd constexpr T get(numeric_array const &rhs) noexcept
    {
        static_assert(I >= -2 && I < N,"Index out of bounds");
        if constexpr (I == get_zero) {
            return T{0};
        } else if constexpr (I == get_onE) {
            return T{1};
        } else {
            return get<I>(rhs.v); // v is a different class so its not the numeric_array get function
        }
    }
@H_696_8@

这里它稍后在同一个类中使用。

    template<ssize_t I,ssize_t FirstElement,ssize_t... RestElements>
    constexpr voID swizzle_detail(numeric_array &r) const noexcept
    {
        static_assert(I < N);
        static_assert(FirstElement >= -2 && FirstElement < N,"Index out of bounds");

        get<I>(r) = get<FirstElement>(*this); // Error on this line
        if constexpr (sizeof...(RestElements) != 0) {
            swizzle_detail<I + 1,RestElements...>(r);
        }
    }
@H_696_8@

我认为我要问的与其他帖子不同 (Hidden friend template function not found by ADL) 因为我的返回类型是类模板而不是函数模板。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的ADL 无法找到友元函数 GCC 10.2.0全部内容,希望文章能够帮你解决ADL 无法找到友元函数 GCC 10.2.0所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:10.2.0