#pragma once #include namespace vcpkg { struct Triplet { static Triplet from_canonical_name(const std::string& triplet_as_string); static const Triplet X86_WINDOWS; static const Triplet X64_WINDOWS; static const Triplet X86_UWP; static const Triplet X64_UWP; static const Triplet ARM_UWP; const std::string& canonical_name() const; std::string architecture() const; std::string system() const; private: std::string m_canonical_name; }; bool operator==(const Triplet& left, const Triplet& right); bool operator!=(const Triplet& left, const Triplet& right); std::string to_string(const Triplet& spec); std::string to_printf_arg(const Triplet& spec); std::ostream& operator<<(std::ostream& os, const Triplet& spec); } namespace std { template <> struct hash { size_t operator()(const vcpkg::Triplet& t) const { std::hash hasher; size_t hash = 17; hash = hash * 31 + hasher(t.canonical_name()); return hash; } }; } // namespace std