【发布时间】:2020-02-27 05:35:08
【问题描述】:
我正在研究现代 C++ 中的 SFINAE,我看到以下代码:
#include <iostream>
struct Bar
{
typedef double it;
};
template <typename T>
typename T::it Foo(const T& arg_f) {
std::cout << "Foo<T>" << std::endl;
return 0;
}
int Foo(int i) { std::cout << "foo(int)" << std::endl; return 0; }
int main(int argc, const char* argv[])
{
Foo(Bar());
Foo(0);
return 0;
}
- 为什么在这段代码中,开发人员使用类型名 T::it?
- 该类型名称与 Bar 的结构有何关系?因为它变量只是在 bar 结构中定义,但它在结构之外用于函数声明。
- 什么是 SFINAE?
【问题讨论】:
标签: c++ visual-c++ metaprogramming sfinae