【发布时间】:2024-04-20 07:45:02
【问题描述】:
https://www.godbolt.org/z/_4aqsF:
template <typename T> struct Container
{
template <typename TPred> T find_if(TPred pred); // the culprit
};
template <typename T> Container<T> MakeContainer(T const &)
{
return Container<T>();
}
int main()
{
auto x = MakeContainer("Hello!");
}
gcc、clang 和 msvc 显然同意这无法编译,因为 find_if 会返回一个数组。
(我会假设成员模板没有被实例化,因为它没有被使用 - 显然,这种简单化的观点是错误的。)
为什么 SFINAE 不适用于这里?
有没有办法为 T 不是可返回类型的类型排除成员模板?
【问题讨论】:
标签: c++ templates sfinae template-argument-deduction