Skip to content

Instantly share code, notes, and snippets.

bool findMatchingFiles(std::vector<std::string> &files)
{
SmallVector<char, 256> currentPath;
std::error_code ec;
llvm::sys::fs::file_status fileStatus;
llvm::sys::fs::current_path(currentPath);
for (llvm::sys::fs::recursive_directory_iterator I(currentPath, ec), E;
I != E; I.increment(ec)) {
if (ec) {
#include <iostream>
#include <string>
#include <utility>
#include <type_traits>
auto toString(bool b)
{
return b ? "true" : "false";
}
#include <iostream>
#include <string>
#include <type_traits>
template <typename T>
std::enable_if_t<std::is_convertible_v<T, std::string>, std::string>
toString(const T& value)
{
return { value };
}
std::is_same<
decltype(std::declval<T>().toString()),
std::string
>::type;
namespace details
{
template <typename Type>
struct HasToString {
private:
template<typename T>
static constexpr auto check(T*) -> typename std::is_same<
decltype(std::declval<T>().toString()),
std::string
>::type;
//big credits to this guy, for a hints: https://stackoverflow.com/a/16824239/4175394
template <typename Type>
struct HasToString {
private:
template<typename T>
static constexpr auto check(T*) -> typename std::is_same<
decltype(std::declval<T>().toString()),
std::string
>::type;
template <typename T>
std::enable_if_t<std::is_convertible_v<T, std::string>, std::string>
toString(const T& value)
{
return { value };
}
namespace details
{
template <typename T>
constexpr auto canCallStdString = !std::is_same_v<T, bool> &&
(std::is_integral_v<T> ||
std::is_unsigned_v<T> ||
std::is_floating_point_v<T>);
}
template <typename T>
template <typename T>
std::enable_if_t<!std::is_same_v<T, bool> &&
(std::is_integral_v<T> ||
std::is_unsigned_v<T> ||
std::is_floating_point_v<T>),
std::string>
toString(const T& value)
{
return std::to_string(value);
}
template <typename T>
std::enable_if_t<std::is_integral_v<T>::value ||
std::is_unsigned_v<T>::value ||
std::is_floating_point_v<T>::value,
std::string>
toString(const T& value)
{
return std::to_string(value);
}