ITK
5.2.0
Insight Toolkit
ITK
Modules
Core
Common
include
itkStaticAssert.h
Go to the documentation of this file.
1
/*=========================================================================
2
*
3
* Copyright NumFOCUS
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0.txt
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*
17
*=========================================================================*/
18
19
#ifndef itkStaticAssert_h
20
#define itkStaticAssert_h
21
22
#include "
itkMacro.h
"
23
24
#if ITK_COMPILER_CXX_STATIC_ASSERT
25
// Use the C++11 static_assert if available
26
35
# define itkStaticAssert(expr, str) static_assert(expr, str)
36
#elif defined(__GNUC__) && !defined(__INTEL_COMPILER)
37
// This trick restricts the static assertion to non global contexts (-> functions)
38
# define itkStaticAssert(expr, str) \
39
({ \
40
extern int __attribute__((error(str))) StaticAssertFailure(); \
41
((void)((expr) ? 0 : StaticAssertFailure()), 0); \
42
})
43
#else
44
// Usual trick (boost, clang, ...), but it will loose the error message on the
45
// way
46
# define ITK_JOIN(X, Y) ITK_DO_JOIN(X, Y)
47
# define ITK_DO_JOIN(X, Y) ITK_DO_JOIN2(X, Y)
48
# define ITK_DO_JOIN2(X, Y) X##Y
49
50
51
namespace
itk
52
{
54
58
template
<
bool
V>
59
struct
StaticAssertFailure;
60
template
<>
61
struct
StaticAssertFailure<true>
62
{};
64
}
// namespace itk
65
66
# define itkStaticAssert(expr, str) \
67
enum \
68
{ \
69
ITK_JOIN(static_assert_typedef, __LINE__) = sizeof(itk::StaticAssertFailure<((expr) == 0 ? false : true)>) \
70
};
71
#endif
72
73
#endif // itkStaticAssert_h
itkMacro.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition:
itkAnnulusOperator.h:24
Generated on Thu Apr 1 2021 02:05:11 for ITK by
1.8.16