fune/tools/clang-tidy/test/performance-implicit-conversion-in-loop.cpp
Jan Keromnes 11dd9afb58 Bug 1486410 - Bug 1466427 - Enable new clang-tidy 7.0 checks. r=andi
Differential Revision: https://phabricator.services.mozilla.com/D4210

--HG--
extra : moz-landing-system : lando
2018-09-04 11:55:19 +00:00

43 lines
972 B
C++

// Iterator returning by value.
template <typename T>
struct Iterator {
void operator++();
T operator*();
bool operator!=(const Iterator& other);
};
// The template argument is an iterator type, and a view is an object you can
// run a for loop on.
template <typename T>
struct View {
T begin();
T end();
};
// With this class, the implicit conversion is a call to the (implicit)
// constructor of the class.
template <typename T>
class ImplicitWrapper {
public:
// Implicit!
ImplicitWrapper(const T& t);
};
template <typename T>
class OperatorWrapper {
public:
OperatorWrapper() = delete;
};
struct SimpleClass {
int foo;
operator OperatorWrapper<SimpleClass>();
};
typedef View<Iterator<SimpleClass>> SimpleView;
void ImplicitSimpleClassIterator() {
for (const ImplicitWrapper<SimpleClass>& foo : SimpleView()) {}
for (const ImplicitWrapper<SimpleClass> foo : SimpleView()) {}
for (ImplicitWrapper<SimpleClass> foo : SimpleView()) {}
}