gpt4 book ai didi

c++ - msvs 2015 中的模板实例化错误

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:54 33 4
gpt4 key购买 nike

我想创建一个将消息映射到默认处理器的编译时结构,但我的代码无法在 msvs 2015 update2 中编译。我认为这是编译器中的一个错误,因为代码非常合法并且可以使用 gcc 进行编译。您可以在下面看到重现问题的最小示例

#include <tuple>

struct About;

struct PluginStub
{
static void About();
};

template<typename Sink>
class Processor
{
template<typename Call, typename Stub, Stub Pointer>
struct Method;

using Methods = std::tuple<Method<About, decltype(&PluginStub::About), &PluginStub::About>>;
};

这给出了这样的输出:

1>  main.cpp(25): error C2440: 'specialization': cannot convert from 'void (__cdecl *)(void)' to 'unknown-type'
1> main.cpp(25): note: Context does not allow for disambiguation of overloaded function
1> main.cpp(26): note: see reference to class template instantiation 'Processor<Sink>' being compiled

问题:

  • 关于 msvs 中的错误,我说得对吗?
  • 如何解决这个问题?

最佳答案

解决方法是使用 std::decay:

using Methods = std::tuple<Method<About, 
typename std::decay<decltype(&PluginStub::About)>::type,
&PluginStub::About>>;

关于c++ - msvs 2015 中的模板实例化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860819/

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