首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在实现类外模板类的模板方法时,C2244:无法将函数定义与现有声明匹配

在实现类外模板类的模板方法时,C2244:无法将函数定义与现有声明匹配
EN

Stack Overflow用户
提问于 2022-05-29 16:35:03
回答 1查看 66关注 0票数 1

遇到一些在GCC和Clang上编译的代码出现问题,而不是MSVC (VS2022)。看起来类似于,但这是几年前的事了,这个问题是由于在方法模板中使用derived_from_specialization_of而引起的,所以我不确定这是否是同一个问题。

我想知道这是什么原因,以及问题是与我的代码或MSVC。

演示

示例:

代码语言:javascript
运行
复制
#include <concepts>

template <template <class...> class Template, class... Args>
void derived_from_specialization_impl(const Template<Args...>&);

template <class T, template <class...> class Template>
concept derived_from_specialization_of = requires(const T& t) {
    derived_from_specialization_impl<Template>(t);
};

template <class T>
class A
{
public:
    A() = default;
};

template <derived_from_specialization_of<A> T>
class B;

template <derived_from_specialization_of<B> T>
class C
{
public:
    C() = default;
};

template <derived_from_specialization_of<A> T>
class B
{
public:
    B() = default;

    template <derived_from_specialization_of<B> U>
    C<U> Foo();

    template <derived_from_specialization_of<B> U>
    C<U> Bar()
    {
        return C<U>();
    }
};

template <derived_from_specialization_of<A> T>
template <derived_from_specialization_of<B> U>
C<U> B<T>::Foo() 
{
    return C<U>();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-29 17:06:58

这是什么原因,如果问题是我的代码或MSVC。

这似乎是MSVC中的一个bug。您正确地为成员函数模板提供了类外定义 Foo<>

使用auto尾随返回类型,似乎无法解决msvc中的问题。您可以为此提交一个错误报告

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72425473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档