有人可以帮我处理这段代码:
#include <type_traits>
#include <vector>
struct nonsense { };
template <struct nonsense const* ptr, typename R>
typename std::enable_if<!std::is_void<R>::value, int>::type
fo(void* const)
{
return 0;
}
template <struct nonsense const* ptr, typename R>
typename std::enable_if<std::is_void<R>::value, int>::type
fo(void* const)
{
return 1;
}
typedef int (*func_type)(void*);
template <std::size_t O>
void run_me()
{
static struct nonsense data;
typedef std::pair<char const* const, func_type> pair_type;
std::vector<pair_type> v;
v.push_back(pair_type{ "a", fo<&data, int> });
v.push_back(pair_type{ "b", fo<&data, void> });
}
int main(int, char*[])
{
run_me<2>();
return 0;
}
clang-3.3 不编译这段代码,但是 g++-4.8.1 可以,这两个编译器哪个是对的?我怀疑代码有问题吗?
错误内容如下:
a.cpp:32:15: error: no matching constructor for initialization of 'pair_type' (aka 'pair<const char *const, func_type>')
v.push_back(pair_type{ "a", fo<&data, int> });
^ ~~~~~~~~~~~~~~~~~~~~~~~
a.cpp:33:15: error: no matching constructor for initialization of 'pair_type' (aka 'pair<const char *const, func_type>')
v.push_back(pair_type{ "b", fo<&data, void> });
^ ~~~~~~~~~~~~~~~~~~~~~~~~