blob: f7b94449971060ebf7459e7ce508264db3c2c02f [file] [log] [blame]
namespace std {
struct Traits {
typedef char char_type;
};
template<typename TraitsType>
struct BasicString {
typedef typename TraitsType::char_type value_type;
value_type value() const;
const value_type *data() const;
};
template<typename TraitsType>
BasicString<TraitsType>
operator+(const BasicString<TraitsType> &lhs,
const BasicString<TraitsType> &rhs);
template<typename TraitsType>
BasicString<TraitsType>
operator+(const BasicString<TraitsType> &lhs,
const char *rhs);
template<typename TraitsType>
struct BasicString;
typedef BasicString<Traits> String;
} // end namespace std
void returnCharTypeNotUselessValueType() {
// CHECK1: "static char extracted(const std::String &x) {\nreturn x.value();\n}\n\n" [[@LINE-1]]:1
// CHECK1: "static const char * extracted(const std::String &x) {\nreturn x.data();\n}\n\n" [[@LINE-2]]:1
std::String x;
// return-char-begin: +1:9
(void)x.value();
// return-char-end: +0:1
// return-data-begin: +1:9
(void)x.data();
// return-data-end: +0:1
} // RUN: clang-refactor-test perform -action extract -selected=return-char -selected=return-data %s | FileCheck --check-prefix=CHECK1 %s
void operatorTypeInferral() {
// CHECK2: "static std::String extracted(const std::String &x) {\nreturn x + "hello";\n}\n\n" [[@LINE-1]]:1
// CHECK2: "static std::String extracted(const std::String &x) {\nreturn x + x;\n}\n\n" [[@LINE-2]]:1
std::String x;
// infer-string1-begin: +1:10
(void)(x + "hello");
// infer-string1-end: -1:21
// infer-string2-begin: +1:10
(void)(x + x);
// infer-string2-end: -1:15
} // RUN: clang-refactor-test perform -action extract -selected=infer-string1 -selected=infer-string2 %s | FileCheck --check-prefix=CHECK2 %s