小编Dav*_*vid的帖子

在比较中使用具有隐式转换的用户定义转换

我很难理解为什么以下代码不允许隐式转换发生.

#include <string>
using namespace std;

struct HasConversionToString {
  HasConversionToString(const string& s_) : s{s_} {}
  string s;
  operator const string&() const { return s; }
};

int main() {
  string s{"a"};
  HasConversionToString obj{"b"};
  return s < obj;
}
Run Code Online (Sandbox Code Playgroud)

clang和gcc都找不到一种有效的方法来比较两个对象的错误:

clang++ -std=c++14 -Wall -Wextra -pedantic conversion.cpp -o test
conversion.cpp:13:12: error: invalid operands to binary expression ('string' (aka 'basic_string<char>') and 'HasConversionToString')
  return s < obj;
         ~ ^ ~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.0/../../../../include/c++/5.3.0/bits/stl_pair.h:220:5: note: candidate template ignored: could not match
      'pair' against 'basic_string'
    operator<(const pair<_T1, _T2>& …
Run Code Online (Sandbox Code Playgroud)

c++ implicit-conversion c++14

14
推荐指数
1
解决办法
452
查看次数

标签 统计

c++ ×1

c++14 ×1

implicit-conversion ×1