C++ 结构化绑定参数推断失败

C++ 结构化绑定参数推断失败,c++,c++17,initializer-list,structured-bindings,template-instantiation,C++,C++17,Initializer List,Structured Bindings,Template Instantiation,我试图扩展以返回函数的结果以及CPU时间。这是我的密码: #include <chrono> #include <iostream> #include <utility> template <typename F, typename... Args> auto MeasureFunctionCpuTime(F func, Args&&... args) { using TimeVar = std::chrono::high_r

我试图扩展以返回函数的结果以及CPU时间。这是我的密码:

#include <chrono>
#include <iostream>
#include <utility>

template <typename F, typename... Args>
auto MeasureFunctionCpuTime(F func, Args&&... args) {
  using TimeVar = std::chrono::high_resolution_clock::time_point;
  constexpr auto get_now = std::chrono::high_resolution_clock::now;
  TimeVar t1 = get_now();
  const auto result = func(std::forward<Args>(args)...);
  const double cpu_time =
      std::chrono::duration_cast<std::chrono::nanoseconds>(get_now() - t1)
          .count();
  return {result, cpu_time};
}

double AddTwoNumbers(const double a, const double b) { return a + b; }

int main() {
  auto [result, cpu_time] = MeasureFunctionCpuTime(AddTwoNumbers, 1.0, 3.0);
  std::cout << result << "\n";
  std::cout << cpu_time << "\n";
}
但我收到以下错误:

main.cpp: In instantiation of ‘auto MeasureFunctionCpuTime(F, Args&& ...) [with F = double (*)(double, double); Args = {double, double}]’:
main.cpp:20:75:   required from here
main.cpp:14:27: error: returning initializer list
   return {result, cpu_time};
                           ^
main.cpp: In function ‘int main()’:
main.cpp:20:8: error: ‘void <structured bindings>’ has incomplete type
   auto [result, cpu_time] = MeasureFunctionCpuTime(AddTwoNumbers, 1.0, 3.0);
        ^~~~~~~~~~~~~~~~~~
main.cpp:auto-MeasureFunctionCpuTime(F,Args&&…[其中F=double(*)(double,double);Args={double,double}]的实例化中:
main.cpp:20:75:从这里开始需要
main.cpp:14:27:错误:返回初始值设定项列表
返回{result,cpu_time};
^
main.cpp:在函数“int main()”中:
main.cpp:20:8:错误:“void”的类型不完整
自动[结果,cpu\U时间]=测量功能CPUTIME(AddTwoNumber,1.0,3.0);
^~~~~~~~~~~~~~~~~~
为什么此初始值设定项列表失败

更新: 根据的提示,通过将函数的返回值更改为此行,我成功地返回了一对:

  return std::pair<decltype(result), double>{result, cpu_time};
返回std::pair{result,cpu\u time};

这种方法有什么缺点吗?

相关:您可以返回
,但是:
std::pair{result,cpu\u time}
由于CTAD,应该足够了。甚至在C++17之前就可以工作。
  return std::pair<decltype(result), double>{result, cpu_time};