我有带有成员函数的类/结构。我想检查返回类型的大小是否正确。
#include <iostream>
#include <type_traits>
struct QString {
wchar_t ucs2() {return L"1"[0];}
};
int main() {
QString arg;
std::cout << "wchar_t " << sizeof(wchar_t) << std::endl;
std::cout << "std::invoke_result_t<decltype(&QString::ucs2)(void)> " << sizeof(std::invoke_result_t<decltype(&QString::ucs2)(void)>) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
结果是,例如,
wchar_t 4
std::invoke_result_t<decltype(&QString::ucs2)(void)> 16
Run Code Online (Sandbox Code Playgroud)
所以我得到不同的尺寸。我期望std::invoke_result_t<decltype(&QString::ucs2)(void)是我的 ucs2 函数的返回类型,即 wchar_t,但情况似乎并非如此。这里发生了什么?
invoke_result定义为:
template< class F, class... ArgTypes>
class invoke_result;
Run Code Online (Sandbox Code Playgroud)
因此,这是有效的
return sizeof(std::invoke_result_t<decltype(&QString::ucs2), QString>);
Run Code Online (Sandbox Code Playgroud)