A toolkit for working with phylogenetic data.
v0.18.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
std.hpp
Go to the documentation of this file.
1 #ifndef GENESIS_UTILS_CORE_STD_H_
2 #define GENESIS_UTILS_CORE_STD_H_
3 
4 /*
5  Genesis - A toolkit for working with phylogenetic data.
6  Copyright (C) 2014-2017 Lucas Czech
7 
8  This program is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program. If not, see <http://www.gnu.org/licenses/>.
20 
21  Contact:
22  Lucas Czech <lucas.czech@h-its.org>
23  Exelixis Lab, Heidelberg Institute for Theoretical Studies
24  Schloss-Wolfsbrunnenweg 35, D-69118 Heidelberg, Germany
25 */
26 
34 #include <cstdint>
35 #include <memory>
36 #include <string>
37 
38 namespace genesis {
39 namespace utils {
40 
41 // =================================================================================================
42 // Expection Handling
43 // =================================================================================================
44 
45 // Try to find a macro that expands to the current function name.
46 #ifdef __cplusplus
47 # define GENESIS_FUNC __PRETTY_FUNCTION__
48 #else
49 # if defined __STDC_VERSION__
50 # define GENESIS_FUNC __func__
51 # else
52 # define GENESIS_FUNC __FUNCTION__
53 // # define GENESIS_FUNC ((const char *) 0)
54 # endif
55 #endif
56 
57 // =================================================================================================
58 // Shortcomings of the C++ 11 STL...
59 // =================================================================================================
60 
67 template<typename T, typename... Args>
68 std::unique_ptr<T> make_unique(Args&&... args)
69 {
70  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
71 }
72 
73 } // namespace utils
74 } // namespace genesis
75 
76 #endif // include guard
std::unique_ptr< T > make_unique(Args &&...args)
Returns a std::unique_ptr for a given type.
Definition: std.hpp:68