C++ gcc中的错误与const&;模板参数?
考虑代码:C++ gcc中的错误与const&;模板参数?,c++,templates,c++17,auto,non-type,C++,Templates,C++17,Auto,Non Type,考虑代码: #包括 模板struct II{}; 模板struct RR{}; template
#包括
模板struct II{};
模板struct RR{};
template让我们稍微简化一下示例:
template <template <auto> class C, auto N>
void foo(C<N> ) { }
int main() {
foo(II<TEN>{} ); // ok
foo(RR<REF>{} ); // error
}
与您的原始示例类似:您需要一个值专门化和一个引用专门化。C
的模板非类型参数中的引用可能不是必需的 我猜:一个普通的auto
(从非类型
)无法推断出一个引用类型,它与类
(至少它与常量auto和非类型
)下推导出的内容相匹配常量int&
)@PiotrSkotnicki不认为它与decltype(auto)一起工作是有意义的吗
?@user975989我认为匹配模板专门化归结为推断发明函数模板的类型,decltype(auto)
没有任何用处
template <template <auto> class C, auto N>
void foo(C<N> ) { }
int main() {
foo(II<TEN>{} ); // ok
foo(RR<REF>{} ); // error
}
template <template <auto> class C, auto N> void foo(C<N> ) { } // #1
template <template <auto&&> class C, auto&& N> void foo(C<N> ) { } // #2
int main() {
foo(II<TEN>{} ); // ok: calls #1
foo(RR<REF>{} ); // ok: calls #2
}