diff options
-rw-r--r-- | libdimensionxx/dimensionxx.hpp | 1 | ||||
-rw-r--r-- | libdimensionxx/dimensionxx/array.hpp | 14 | ||||
-rw-r--r-- | libdimensionxx/dimensionxx/utility.hpp | 47 |
3 files changed, 48 insertions, 14 deletions
diff --git a/libdimensionxx/dimensionxx.hpp b/libdimensionxx/dimensionxx.hpp index 99b9a97..ba3f662 100644 --- a/libdimensionxx/dimensionxx.hpp +++ b/libdimensionxx/dimensionxx.hpp @@ -22,6 +22,7 @@ #define DIMENSIONXX_HPP // Internal helpers +#include <dimensionxx/utility.hpp> #include <dimensionxx/cookie.hpp> // libdimension wrappers diff --git a/libdimensionxx/dimensionxx/array.hpp b/libdimensionxx/dimensionxx/array.hpp index e9c2967..b3b0496 100644 --- a/libdimensionxx/dimensionxx/array.hpp +++ b/libdimensionxx/dimensionxx/array.hpp @@ -188,20 +188,6 @@ namespace Dimension std::tr1::shared_ptr<T> m_object; }; - // A constraint enforcing that T is a POD type by making it part of a union. - // Taking the address of this function will cause a compile-time failure if - // T is not a POD type. - template <typename T> - void - POD_constraint() - { - union - { - T t; - } constraint; - static_cast<void>(constraint); // Silence unused variable warning - } - // Array_Element template <typename T> diff --git a/libdimensionxx/dimensionxx/utility.hpp b/libdimensionxx/dimensionxx/utility.hpp new file mode 100644 index 0000000..50c5e67 --- /dev/null +++ b/libdimensionxx/dimensionxx/utility.hpp @@ -0,0 +1,47 @@ +/************************************************************************* + * Copyright (C) 2009 Tavian Barnes <tavianator@gmail.com> * + * * + * This file is part of The Dimension Library. * + * * + * The Dimension Library is free software; you can redistribute it and/ * + * or modify it under the terms of the GNU Lesser General Public License * + * as published by the Free Software Foundation; either version 3 of the * + * License, or (at your option) any later version. * + * * + * The Dimension Library is distributed in the hope that it will be * + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this program. If not, see * + * <http://www.gnu.org/licenses/>. * + *************************************************************************/ + +// Template utilities + +#ifndef DIMENSIONXX_UTILITY_HPP +#define DIMENSIONXX_UTILITY_HPP + +namespace Dimension +{ + // A constraint enforcing that T is a POD type by making it part of a union. + // Taking the address of this function will cause a compile-time failure if + // T is not a POD type. + template <typename T> + void POD_constraint(); + + // POD constraint implementation + template <typename T> + void + POD_constraint() + { + union + { + T t; + } constraint; + static_cast<void>(constraint); // Silence unused variable warning + } +} + +#endif // DIMENSIONXX_UTILITY_HPP |