问题描述
来自libstdc ++ <concepts>
标头:
namespace ranges
{
namespace __cust_swap
{
template<typename _Tp> void swap(_Tp&,_Tp&) = delete;
来自MS-STL <concepts>
标头:
namespace ranges {
namespace _Swap {
template <class _Ty>
void swap(_Ty&,_Ty&) = delete;
在您要禁止调用复制/移动作业/控制器的上下文之外,我从未遇到过= delete;
。
我很好奇是否有必要,所以我像这样从库中注释掉了= delete;
部分:
// template<typename _Tp> void swap(_Tp&,_Tp&) = delete;
查看以下测试用例是否可以编译。
#include <concepts>
#include <iostream>
struct dummy {
friend void swap(dummy& a,dummy& b) {
std::cout << "ADL" << std::endl;
}
};
int main()
{
int a{};
int b{};
dummy c{};
dummy d{};
std::ranges::swap(a,b);
std::ranges::swap(c,d); // Ok. Prints "ADL" on console.
}
不仅可以编译,而且可以通过为swap
调用用户定义的struct dummy
来表现良好。所以我想知道,
-
template<typename _Tp> void swap(_Tp&,_Tp&) = delete;
在此情况下到底能做什么? - 在没有
template<typename _Tp> void swap(_Tp&,_Tp&) = delete;
的情况下此中断什么时候出现?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)