ITK  6.0.0
Insight Toolkit
itkMakeFilled.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  * https://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 #ifndef itkMakeFilled_h
19 #define itkMakeFilled_h
20 
21 namespace itk
22 {
27 template <typename TContainer>
28 constexpr TContainer
29 MakeFilled(typename TContainer::const_reference value)
30 {
31  // Note: The seemingly redundant {} initialization is required for C++14 and C++17, in order to declare MakeFilled
32  // constexpr. (C++20 does allow uninitialized variables in a constexpr function.)
33  TContainer container{};
36  static_assert(container.size() > 0, "MakeFilled requires TContainer with constant non-zero size!");
37 
38  // Note that `std::fill` and `std::fill_n` are not `constexpr` until C++20.
39  for (auto & element : container)
40  {
41  element = value;
42  }
43  return container;
44 }
45 } // namespace itk
46 
47 #endif // itkMakeFilled_h
itk::MakeFilled
constexpr TContainer MakeFilled(typename TContainer::const_reference value)
Definition: itkMakeFilled.h:29
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnatomicalOrientation.h:29