dec*_*iar 4 c++ templates template-specialization
我正在尝试模板专门化,但是无法确定以下原因char const * const(尽管是有效类型)无法解析的原因。
template <typename A, typename B> B foo (A) = delete;
template <> void foo (char *) {}
template <> void foo (char const * const) {}
int main () {
{ // types OK
char const * const a = nullptr;
char * b = nullptr;
}
char * data;
foo<char *, void>(data); // OK
foo<char const * const, void>(data); // ERROR
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误
error: use of deleted function ‘B foo(A) [with A = const char* const; B = void]’
Run Code Online (Sandbox Code Playgroud)
请注意,const参数类型将忽略顶级限定符,因此,
template <> void foo (char const * const) {}
Run Code Online (Sandbox Code Playgroud)
与...相同
template <> void foo (char const *) {}
Run Code Online (Sandbox Code Playgroud)
这是的专用版本foo<char const *, void>,而不是foo<char const * const, void>(如您预期的那样)。
解决方法是使调用和专业化匹配,例如,将专业化明确更改为
template <> void foo<char const * const, void> (char const * const) {}
Run Code Online (Sandbox Code Playgroud)
或将调用更改为
foo<char const *, void>(data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |