让我们假设我们有一个函数
struct Foo : std::integral_constant<int (*) (std::string, size_t), &foo> {};
我想用包装函数
调用这个函数std::cout << boo<Foo> ("b") << "\n"; // 42
因此,error: too few arguments to function
应包含指向适当函数的指针,因此我将其声明为
using Ptr = int (*) (std::string, size_t);
Ptr p = &foo;
auto x = p ("10");
现在用法看起来像这样
file{'EXTRACTED_PATH/ant.properties':
ensure: present
}
在GCC 5.3.1上,这段代码编译得很好,但是在GCC 6.3.1和GCC 7.2.1上,编译失败了
$install_jar_location=$::getinstallerpath
据我所知,如果我使用指向没有包装模板函数的函数的指针
$installer_location="/home/oracle/Installer"
然后在所有提到的GCC版本中都出现错误。
根据后一个例子,是否意味着我不能在没有明确指定第二个参数的情况下使用指针,即使指向函数不需要它?
根据主要示例,是否意味着GCC 5.3.1与模板包装器一起错误地实现了这种行为?
答案 0 :(得分:1)
使用具有默认参数的函数使用任何可能的签名都没关系,但是您自己引入了不一致。您已经将Foo
专门定义为包含指向双参数函数的指针,因此您最好使用两个参数调用它。如果要使用一个参数调用它,请将其用作指向单参数函数的指针。
我不确定您使用integral_constant尝试完成的任务。