#ifndef _TEMPLATES_H_
#define _TEMPLATES_H_

#include <map>
#include <vector>
#include <cstdint>
#include <string>

/*
class ClassA
{
public:
struct InnerStruct;
int a;
};
*/

template <typename T, typename A1>
inline T make_a(A1 const & a1) {
return T(a1);
}

template <typename T = void, typename SFINAE = void>
struct adl_serializer;

template <template <typename U, typename V, typename... Args> class ObjectType = std::map, template <typename U, typename... Args> class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template <typename U> class AllocatorType = std::allocator, template <typename T, typename SFINAE = void> class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
class basic_json;

#endif
