#pragma once namespace { template struct ValueAdder; template <> struct ValueAdder<> { inline static void add(std::vector> &) { } }; template struct ValueAdder { inline static void add(std::vector> & values, Argument value, Arguments&&... rest) { values.push_back(glbinding::createValue(value)); ValueAdder::add(values, std::forward(rest)...); } }; template inline void addValuesTo(std::vector> & values, Arguments&&... arguments) { ValueAdder::add(values, std::forward(arguments)...); } } // namespace namespace glbinding { template GLBINDING_CONSTEXPR Value::Value(const T & value) : m_value(value) { } template GLBINDING_CONSTEXPR T Value::value() const { return m_value; } template std::unique_ptr createValue(const Argument & argument) { return std::unique_ptr>(new Value(argument)); } template std::vector> createValues(Arguments&&... arguments) { auto values = std::vector>{}; addValuesTo(values, std::forward(arguments)...); return values; } } // namespace glbinding