我可以明确地专门化 std:shared_ptr::operator ->

can I explicitly specialize std:shared_ptr::operator ->

我第一次问问题,所以手指交叉。

我想提供 shared_ptr::operator-> 的专业化 以下不会在 gcc 4.8.3

上编译
template<> 
widget* std::shared_ptr<widget>::operator->() const 
{ 
    return nullptr; 
}

我得到以下编译错误 错误:'std::shared_ptr'

中没有声明成员函数'operator->'

我已经尝试了一些关于如何专门化它的变体,但我总是遇到同样的错误。例如,将其包装在命名空间标准范围内,还尝试了尾随 reutrn 类型,使其成为 noexcept 等

不,您不能从 std 中的类型特化成员函数。这样做会使您的程序格式错误(我相信不需要诊断)。即使"works"也是非法的

您可以将整个类型专门化为用户提供的类型,但这基本上涉及从头开始重写 std::shared_ptr