1 #ifndef DALI_TYPE_TRAITS_H
2 #define DALI_TYPE_TRAITS_H
5 * Copyright (c) 2020 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.
46 IS_TRIVIAL_TYPE = __has_trivial_destructor(Type) && __has_trivial_copy(Type)
53 * An example of overriding a traits flag for a custom type can be done by:
59 * /// Tell DALi that Dali::Matrix is POD, even though it has a copy constructor
60 * template <> struct TypeTraits< Dali::Matrix > : public BasicTypes< Dali::Matrix > { enum { IS_TRIVIAL_TYPE = true }; };
67 template<typename Type>
68 struct TypeTraits : public BasicTypes<Type>
77 #endif // DALI_TYPE_TRAITS_H