1 #ifndef __DALI_TYPE_TRAITS_H__
2 #define __DALI_TYPE_TRAITS_H__
5 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
24 * @addtogroup dali_core_common
29 * @brief Basic type traits that every type has by default.
31 * This allows specializations to not have to repeat all flags.
34 template <typename Type>
38 * @brief This flag tells Dali if a class can be considered POD.
40 * If it declares copy constructor and/or destructor, its not considered trivial
41 * and cannot be copied by using memcpy etc.
44 enum { IS_TRIVIAL_TYPE = __has_trivial_destructor(Type) && __has_trivial_copy(Type) };
50 * An example of overriding a traits flag for a custom type can be done by:
56 * /// Tell DALi that Dali::Matrix is POD, even though it has a copy constructor
57 * template <> struct TypeTraits< Dali::Matrix > : public BasicTypes< Dali::Matrix > { enum { IS_TRIVIAL_TYPE = true }; };
64 template <typename Type>
65 struct TypeTraits : public BasicTypes< Type >
74 #endif /* __DALI_TYPE_TRAITS_H__ */