Skip to content

Commit eae9caf

Browse files
committed
Initial idea
1 parent 2d4c4b4 commit eae9caf

File tree

9 files changed

+368
-15
lines changed

9 files changed

+368
-15
lines changed

CMakeLists.txt

+14-1
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,23 @@ option(GLM_ENABLE_CXX_11 "Enable C++ 11" OFF)
3232
option(GLM_ENABLE_CXX_14 "Enable C++ 14" OFF)
3333
option(GLM_ENABLE_CXX_17 "Enable C++ 17" OFF)
3434
option(GLM_ENABLE_CXX_20 "Enable C++ 20" OFF)
35+
option(GLM_ENABLE_CXX_23 "Enable C++ 23" OFF)
3536

3637
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3738

38-
if(GLM_ENABLE_CXX_20)
39+
if(GLM_ENABLE_CXX_23)
40+
set(CMAKE_CXX_STANDARD 23)
41+
add_definitions(-DGLM_FORCE_CXX23)
42+
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
43+
message(STATUS "GLM: Disable -Wc++98-compat warnings")
44+
add_compile_options(-Wno-c++98-compat)
45+
add_compile_options(-Wno-c++98-compat-pedantic)
46+
endif()
47+
if(NOT GLM_QUIET)
48+
message(STATUS "GLM: Build with C++23 features")
49+
endif()
50+
51+
elseif(GLM_ENABLE_CXX_20)
3952
set(CMAKE_CXX_STANDARD 20)
4053
add_definitions(-DGLM_FORCE_CXX20)
4154
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")

doc/api/a00032_source.html

+14-3
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
128128
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">// C++ Version</span></div>
129129
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
130-
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A</span></div>
130+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A, GLM_FORCE_CXX23</span></div>
131131
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
132132
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX98_FLAG (1 &lt;&lt; 1)</span></div>
133133
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX03_FLAG (1 &lt;&lt; 2)</span></div>
@@ -138,6 +138,7 @@
138138
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX20_FLAG (1 &lt;&lt; 7)</span></div>
139139
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#define GLM_LANG_CXXMS_FLAG (1 &lt;&lt; 8)</span></div>
140140
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#define GLM_LANG_CXXGNU_FLAG (1 &lt;&lt; 9)</span></div>
141+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX23_FLAG (1 &lt;&lt; 10)</span></div>
141142
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
142143
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG</span></div>
143144
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)</span></div>
@@ -146,6 +147,7 @@
146147
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)</span></div>
147148
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)</span></div>
148149
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX20 (GLM_LANG_CXX17 | GLM_LANG_CXX20_FLAG)</span></div>
150+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#define GLM_LANG_CXX23 (GLM_LANG_CXX20 | GLM_LANG_CXX23_FLAG)</span></div>
149151
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG</span></div>
150152
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG</span></div>
151153
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
@@ -159,6 +161,9 @@
159161
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
160162
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#if (defined(GLM_FORCE_CXX_UNKNOWN))</span></div>
161163
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor"># define GLM_LANG 0</span></div>
164+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#elif defined(GLM_FORCE_CXX23)</span></div>
165+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX23 | GLM_LANG_EXT)</span></div>
166+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor"># define GLM_LANG_STL11_FORCED</span></div>
162167
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#elif defined(GLM_FORCE_CXX20)</span></div>
163168
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)</span></div>
164169
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor"># define GLM_LANG_STL11_FORCED</span></div>
@@ -192,7 +197,9 @@
192197
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor"># define GLM_LANG_PLATFORM 0</span></div>
193198
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="preprocessor"># endif</span></div>
194199
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
195-
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor"># if __cplusplus &gt; 201703L || GLM_LANG_PLATFORM &gt; 201703L</span></div>
200+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor"># if __cplusplus &gt; 202002L || GLM_LANG_PLATFORM &gt; 202002L</span></div>
201+
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX23 | GLM_LANG_EXT)</span></div>
202+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor"># elif __cplusplus &gt; 201703L || GLM_LANG_PLATFORM &gt; 201703L</span></div>
196203
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)</span></div>
197204
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor"># elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L</span></div>
198205
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)</span></div>
@@ -1010,7 +1017,11 @@
10101017
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;<span class="preprocessor"># pragma message (GLM_STR(GLM_VERSION_MESSAGE))</span></div>
10111018
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; </div>
10121019
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="comment">// Report C++ language</span></div>
1013-
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;<span class="preprocessor"># if (GLM_LANG &amp; GLM_LANG_CXX20_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>
1020+
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;<span class="preprocessor"># if (GLM_LANG &amp; GLM_LANG_CXX23_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>
1021+
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: C++ 23 with extensions&quot;)</span></div>
1022+
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;<span class="preprocessor"># elif (GLM_LANG &amp; GLM_LANG_CXX23_FLAG)</span></div>
1023+
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: C++ 2B&quot;)</span></div>
1024+
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;<span class="preprocessor"># elif (GLM_LANG &amp; GLM_LANG_CXX20_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>
10141025
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: C++ 20 with extensions&quot;)</span></div>
10151026
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;<span class="preprocessor"># elif (GLM_LANG &amp; GLM_LANG_CXX20_FLAG)</span></div>
10161027
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;<span class="preprocessor"># pragma message(&quot;GLM: C++ 2A&quot;)</span></div>

glm/detail/setup.hpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
#define GLM_LANG_CXX20_FLAG (1 << 7)
7171
#define GLM_LANG_CXXMS_FLAG (1 << 8)
7272
#define GLM_LANG_CXXGNU_FLAG (1 << 9)
73+
#define GLM_LANG_CXX23_FLAG (1 << 10)
7374

7475
#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
7576
#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
@@ -78,6 +79,7 @@
7879
#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)
7980
#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)
8081
#define GLM_LANG_CXX20 (GLM_LANG_CXX17 | GLM_LANG_CXX20_FLAG)
82+
#define GLM_LANG_CXX23 (GLM_LANG_CXX20 | GLM_LANG_CXX23_FLAG)
8183
#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
8284
#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
8385

@@ -91,6 +93,9 @@
9193

9294
#if (defined(GLM_FORCE_CXX_UNKNOWN))
9395
# define GLM_LANG 0
96+
#elif defined(GLM_FORCE_CXX23)
97+
# define GLM_LANG (GLM_LANG_CXX23 | GLM_LANG_EXT)
98+
# define GLM_LANG_STL11_FORCED
9499
#elif defined(GLM_FORCE_CXX20)
95100
# define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)
96101
# define GLM_LANG_STL11_FORCED
@@ -124,7 +129,9 @@
124129
# define GLM_LANG_PLATFORM 0
125130
# endif
126131

127-
# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
132+
# if __cplusplus > 202002L || GLM_LANG_PLATFORM > 202002L
133+
# define GLM_LANG (GLM_LANG_CXX23 | GLM_LANG_EXT)
134+
# elif __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
128135
# define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)
129136
# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L
130137
# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
@@ -980,7 +987,11 @@ namespace detail
980987
# pragma message ("GLM: version " GLM_STR(GLM_VERSION_MAJOR) "." GLM_STR(GLM_VERSION_MINOR) "." GLM_STR(GLM_VERSION_PATCH))
981988

982989
// Report C++ language
983-
# if (GLM_LANG & GLM_LANG_CXX20_FLAG) && (GLM_LANG & GLM_LANG_EXT)
990+
# if (GLM_LANG & GLM_LANG_CXX23_FLAG) && (GLM_LANG & GLM_LANG_EXT)
991+
# pragma message("GLM: C++ 23 with extensions")
992+
# elif (GLM_LANG & GLM_LANG_CXX23_FLAG)
993+
# pragma message("GLM: C++ 2B")
994+
# elif (GLM_LANG & GLM_LANG_CXX20_FLAG) && (GLM_LANG & GLM_LANG_EXT)
984995
# pragma message("GLM: C++ 20 with extensions")
985996
# elif (GLM_LANG & GLM_LANG_CXX20_FLAG)
986997
# pragma message("GLM: C++ 2A")

glm/ext.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@
245245
#include "./gtx/raw_data.hpp"
246246
#include "./gtx/rotate_normalized_axis.hpp"
247247
#include "./gtx/rotate_vector.hpp"
248+
#include "./gtx/span.hpp"
248249
#include "./gtx/spline.hpp"
249250
#include "./gtx/std_based_type.hpp"
250251
#if !((GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP))

glm/gtx/range.hpp

+15-9
Original file line numberDiff line numberDiff line change
@@ -35,55 +35,61 @@ namespace glm
3535
# endif
3636

3737
template<typename T, qualifier Q>
38-
inline length_t components(vec<1, T, Q> const& v)
38+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(vec<1, T, Q> const& v)
3939
{
4040
return v.length();
4141
}
4242

4343
template<typename T, qualifier Q>
44-
inline length_t components(vec<2, T, Q> const& v)
44+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(vec<2, T, Q> const& v)
4545
{
4646
return v.length();
4747
}
4848

4949
template<typename T, qualifier Q>
50-
inline length_t components(vec<3, T, Q> const& v)
50+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(vec<3, T, Q> const& v)
5151
{
5252
return v.length();
5353
}
5454

5555
template<typename T, qualifier Q>
56-
inline length_t components(vec<4, T, Q> const& v)
56+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(vec<4, T, Q> const& v)
57+
{
58+
return v.length();
59+
}
60+
61+
template<typename T, qualifier Q>
62+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(qua<T, Q> const& v)
5763
{
5864
return v.length();
5965
}
6066

6167
template<typename genType>
62-
inline length_t components(genType const& m)
68+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(genType const& m)
6369
{
6470
return m.length() * m[0].length();
6571
}
6672

6773
template<typename genType>
68-
inline typename genType::value_type const * begin(genType const& v)
74+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type const * begin(genType const& v)
6975
{
7076
return value_ptr(v);
7177
}
7278

7379
template<typename genType>
74-
inline typename genType::value_type const * end(genType const& v)
80+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type const * end(genType const& v)
7581
{
7682
return begin(v) + components(v);
7783
}
7884

7985
template<typename genType>
80-
inline typename genType::value_type * begin(genType& v)
86+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type * begin(genType& v)
8187
{
8288
return value_ptr(v);
8389
}
8490

8591
template<typename genType>
86-
inline typename genType::value_type * end(genType& v)
92+
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type * end(genType& v)
8793
{
8894
return begin(v) + components(v);
8995
}

0 commit comments

Comments
 (0)