C++ decltype的模板参数数量不正确。

C++ decltype的模板参数数量不正确。,c++,c++11,C++,C++11,在下面的程序中,编译时它抱怨应该有2个模板参数,但只有1个 template<typename T, typename U = T, typename = std::enable_if<std::is_convertible<std::decltype(int()), int>::value>::type> void func(T t, U u){} 模板 void func(T,U){ 然而,下面的代码编译 template<typena

在下面的程序中,编译时它抱怨应该有2个模板参数,但只有1个

template<typename T, typename U = T, 
    typename = std::enable_if<std::is_convertible<std::decltype(int()), int>::value>::type>
void func(T t, U u){}
模板
void func(T,U){
然而,下面的代码编译

template<typename T, typename U = T, 
    typename = std::enable_if<std::is_convertible<int, int>::value>::type>
void func(T t, U u){}
模板
void func(T,U){

我想知道这两者之间的区别是什么,以及我应该如何编译这段代码。

decltype
是一个关键字,而不是一个函数;您混淆了解析器。放下
std::


()
decltype
是一个关键字,而不是一个函数;您混淆了解析器。放下
std::


()我想知道为什么上面的内容不能编译。我本以为由
std::decltype
导出的类型是
int
。然而,运行代码时,表示只有一个参数提供给
std::is_convertible
,我想知道为什么会这样,为什么它没有编译。然后我想知道如何使这两段示例代码等效。
decltype
是一个关键字,所以删除
std:
。我想知道为什么上面的代码不能编译。我本以为由
std::decltype
导出的类型是
int
。然而,运行代码时,表示只有一个参数提供给
std::is_convertible
,我想知道为什么会这样,为什么它没有编译。然后我想知道如何使这两段示例代码等效。
decltype
是一个关键字,因此删除
std:
。请下次发布;这包括
#include
s。谢谢,那太傻了。@cogle:A bit:P告诉你,这是一个非常糟糕的诊断;我一点也不觉得奇怪。是的,在我使用的代码中,我使用了
std::declval
,所以我天真地认为
decltype
是相同的方式,在我做上面的例子时,我就犯了这个错误。谢谢你的帮助。请下次发帖子;这包括
#include
s。谢谢,那太傻了。@cogle:A bit:P告诉你,这是一个非常糟糕的诊断;我一点也不觉得奇怪。是的,在我使用的代码中,我使用了
std::declval
,所以我天真地认为
decltype
是相同的方式,在我做上面的例子时,我就犯了这个错误。谢谢你的帮助。