Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running C.I. for "Add support for std::span (C++20) #1327" #1342

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,23 @@ option(GLM_ENABLE_CXX_11 "Enable C++ 11" OFF)
option(GLM_ENABLE_CXX_14 "Enable C++ 14" OFF)
option(GLM_ENABLE_CXX_17 "Enable C++ 17" OFF)
option(GLM_ENABLE_CXX_20 "Enable C++ 20" OFF)
option(GLM_ENABLE_CXX_23 "Enable C++ 23" OFF)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(GLM_ENABLE_CXX_20)
if(GLM_ENABLE_CXX_23)
set(CMAKE_CXX_STANDARD 23)
add_definitions(-DGLM_FORCE_CXX23)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "GLM: Disable -Wc++98-compat warnings")
add_compile_options(-Wno-c++98-compat)
add_compile_options(-Wno-c++98-compat-pedantic)
endif()
if(NOT GLM_QUIET)
message(STATUS "GLM: Build with C++23 features")
endif()

elseif(GLM_ENABLE_CXX_20)
set(CMAKE_CXX_STANDARD 20)
add_definitions(-DGLM_FORCE_CXX20)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
Expand Down
17 changes: 14 additions & 3 deletions doc/api/a00032_source.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">// C++ Version</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<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>
<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>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<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>
<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>
Expand All @@ -138,6 +138,7 @@
<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>
<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>
<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>
<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>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<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>
<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>
Expand All @@ -146,6 +147,7 @@
<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>
<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>
<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>
<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>
<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>
<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>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
Expand All @@ -159,6 +161,9 @@
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#if (defined(GLM_FORCE_CXX_UNKNOWN))</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor"># define GLM_LANG 0</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#elif defined(GLM_FORCE_CXX23)</span></div>
<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>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor"># define GLM_LANG_STL11_FORCED</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#elif defined(GLM_FORCE_CXX20)</span></div>
<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>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor"># define GLM_LANG_STL11_FORCED</span></div>
Expand Down Expand Up @@ -192,7 +197,9 @@
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor"># define GLM_LANG_PLATFORM 0</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
Expand Down Expand Up @@ -1010,7 +1017,11 @@
<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>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; </div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="comment">// Report C++ language</span></div>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
Expand Down
15 changes: 13 additions & 2 deletions glm/detail/setup.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
#define GLM_LANG_CXX20_FLAG (1 << 7)
#define GLM_LANG_CXXMS_FLAG (1 << 8)
#define GLM_LANG_CXXGNU_FLAG (1 << 9)
#define GLM_LANG_CXX23_FLAG (1 << 10)

#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
Expand All @@ -78,6 +79,7 @@
#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)
#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)
#define GLM_LANG_CXX20 (GLM_LANG_CXX17 | GLM_LANG_CXX20_FLAG)
#define GLM_LANG_CXX23 (GLM_LANG_CXX20 | GLM_LANG_CXX23_FLAG)
#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG

Expand All @@ -91,6 +93,9 @@

#if (defined(GLM_FORCE_CXX_UNKNOWN))
# define GLM_LANG 0
#elif defined(GLM_FORCE_CXX23)
# define GLM_LANG (GLM_LANG_CXX23 | GLM_LANG_EXT)
# define GLM_LANG_STL11_FORCED
#elif defined(GLM_FORCE_CXX20)
# define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)
# define GLM_LANG_STL11_FORCED
Expand Down Expand Up @@ -124,7 +129,9 @@
# define GLM_LANG_PLATFORM 0
# endif

# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
# if __cplusplus > 202002L || GLM_LANG_PLATFORM > 202002L
# define GLM_LANG (GLM_LANG_CXX23 | GLM_LANG_EXT)
# elif __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
# define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)
# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L
# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
Expand Down Expand Up @@ -980,7 +987,11 @@ namespace detail
# pragma message ("GLM: version " GLM_STR(GLM_VERSION_MAJOR) "." GLM_STR(GLM_VERSION_MINOR) "." GLM_STR(GLM_VERSION_PATCH))

// Report C++ language
# if (GLM_LANG & GLM_LANG_CXX20_FLAG) && (GLM_LANG & GLM_LANG_EXT)
# if (GLM_LANG & GLM_LANG_CXX23_FLAG) && (GLM_LANG & GLM_LANG_EXT)
# pragma message("GLM: C++ 23 with extensions")
# elif (GLM_LANG & GLM_LANG_CXX23_FLAG)
# pragma message("GLM: C++ 2B")
# elif (GLM_LANG & GLM_LANG_CXX20_FLAG) && (GLM_LANG & GLM_LANG_EXT)
# pragma message("GLM: C++ 20 with extensions")
# elif (GLM_LANG & GLM_LANG_CXX20_FLAG)
# pragma message("GLM: C++ 2A")
Expand Down
1 change: 1 addition & 0 deletions glm/ext.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@
#include "./gtx/raw_data.hpp"
#include "./gtx/rotate_normalized_axis.hpp"
#include "./gtx/rotate_vector.hpp"
#include "./gtx/span.hpp"
#include "./gtx/spline.hpp"
#include "./gtx/std_based_type.hpp"
#if !((GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP))
Expand Down
60 changes: 19 additions & 41 deletions glm/gtx/range.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,75 +22,53 @@
#endif

#include "../gtc/type_ptr.hpp"
#include "../gtc/vec1.hpp"
#include <type_traits>
#include "type_trait.hpp"

namespace glm
{
/// @addtogroup gtx_range
/// @{

# if GLM_COMPILER & GLM_COMPILER_VC
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
# endif

template<typename T, qualifier Q>
inline length_t components(vec<1, T, Q> const& v)
{
return v.length();
}

template<typename T, qualifier Q>
inline length_t components(vec<2, T, Q> const& v)
{
return v.length();
}

template<typename T, qualifier Q>
inline length_t components(vec<3, T, Q> const& v)
{
return v.length();
}

template<typename T, qualifier Q>
inline length_t components(vec<4, T, Q> const& v)
{
return v.length();
}
#if GLM_COMPILER & GLM_COMPILER_VC
# pragma warning(push)
# pragma warning(disable : 4100) // unreferenced formal parameter
#endif

/// @warning This is not same as `type<genType>::components`, calling this returns total elements (for mat4 returns 16 instead of 4).
template<typename genType>
inline length_t components(genType const& m)
/*GLM_DEPRECATED*/ GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t components(genType const& v)
{
return m.length() * m[0].length();
return type<genType>::elements;
}

#if GLM_COMPILER & GLM_COMPILER_VC
# pragma warning(pop)
#endif

template<typename genType>
inline typename genType::value_type const * begin(genType const& v)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type const * begin(genType const& v)
{
return value_ptr(v);
}

template<typename genType>
inline typename genType::value_type const * end(genType const& v)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type const * end(genType const& v)
{
return begin(v) + components(v);
return begin(v) + type<genType>::elements;
}

template<typename genType>
inline typename genType::value_type * begin(genType& v)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type * begin(genType& v)
{
return value_ptr(v);
}

template<typename genType>
inline typename genType::value_type * end(genType& v)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename genType::value_type * end(genType& v)
{
return begin(v) + components(v);
return begin(v) + type<genType>::elements;
}

# if GLM_COMPILER & GLM_COMPILER_VC
# pragma warning(pop)
# endif

/// @}
}//namespace glm
144 changes: 144 additions & 0 deletions glm/gtx/span.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
/// @ref gtx_span
/// @file glm/gtx/span.hpp
/// @author Abit Gray
///
/// @defgroup gtx_span GLM_GTX_span
/// @ingroup gtx
///
/// Include <glm/gtx/span.hpp> to use the features of this extension.
///
/// Defines functions to convert glm types to std::valarray or view them using C++20 std::span and C++23 std::mdspan.

#pragma once

// Dependencies
#include "../detail/setup.hpp"

#ifndef GLM_ENABLE_EXPERIMENTAL
# error "GLM: GLM_GTX_span is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
#elif GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
# pragma message("GLM: GLM_GTX_span extension included")
#endif

// `std::enable_if` support (and few more)
// Required for all functions below
#if !(GLM_LANG & GLM_LANG_CXX11_FLAG)
# error "GLM_GTX_span requiers at least C++11, using C++20 or C++23 is recommended for full functionality"
#endif

// GLM_MESSAGES info
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
# if (GLM_LANG & GLM_LANG_CXX20_FLAG) && defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
# pragma message("GLM: GLM_GTX_span extension will include std::span")
# endif
# if (GLM_LANG & GLM_LANG_CXX23_FLAG) && defined(__cpp_lib_mdspan) && __cpp_lib_mdspan >= 202207L
# pragma message("GLM: GLM_GTX_span extension will include std::mdspan")
# endif
#endif

#include "../gtc/type_ptr.hpp"
#include "type_trait.hpp"

#include <valarray>

// Version-specific includes
#if GLM_LANG & GLM_LANG_CXX20_FLAG
// Feature testing
# include <version>

// C++20 std::span
# if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
# include <span>
# endif

// C++23 std::mdspan
# if (GLM_LANG & GLM_LANG_CXX23) && defined(__cpp_lib_mdspan) && __cpp_lib_mdspan >= 202207L
# include <mdspan>
# endif
#endif

namespace glm
{
/// @addtogroup gtx_span
/// @{

# if (GLM_LANG & GLM_LANG_CXX20_FLAG)
template<typename T>
requires (type<std::remove_cvref_t<T>>::elements > 0)
# else
template<typename T, typename = typename std::enable_if<
(
type<
typename std::remove_reference<
typename std::remove_cv<T>::type
>::type
>::elements > 0
)>::type>
# endif
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::valarray<typename T::value_type> valarray(T const& v)
{
return std::valarray<typename T::value_type>(value_ptr(v), type<T>::elements);
}

#if (GLM_LANG & GLM_LANG_CXX20_FLAG) && defined(__cpp_lib_span) && __cpp_lib_span >= 202002L

template<typename T>
requires (type<std::remove_cvref_t<T>>::elements > 0)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::span<typename T::value_type> span(T & v)
{
using TN = std::remove_cvref_t<T>;
return std::span<typename T::value_type>(value_ptr(v), type<TN>::elements);
}

template<typename T>
requires (type<std::remove_cvref_t<T>>::elements > 0)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::span<const typename T::value_type> span(T const& v)
{
using TN = std::remove_cvref_t<T>;
return std::span<const typename T::value_type>(value_ptr(v), type<TN>::elements);
}

#endif

#if (GLM_LANG & GLM_LANG_CXX23_FLAG) && defined(__cpp_lib_mdspan) && __cpp_lib_mdspan >= 202207L

template<typename T>
requires (type<std::remove_cvref_t<T>>::rows == 1)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::mdspan<typename T::value_type> span(T & v)
{
using TN = std::remove_cvref_t<T>;
static_assert(type<TN>::cols >= 1);
return std::mdspan<typename T::value_type>(value_ptr(v), type<TN>::cols);
}

template<typename T>
requires (type<std::remove_cvref_t<T>>::rows == 1)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::mdspan<const typename T::value_type> span(T const& v)
{
using TN = std::remove_cvref_t<T>;
static_assert(type<TN>::cols >= 1);
return std::mdspan<const typename T::value_type>(value_ptr(v), type<TN>::cols);
}

template<typename T>
requires (type<std::remove_cvref_t<T>>::rows > 1)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR auto mdspan(T & m)
{
using TN = std::remove_cvref_t<T>;
static_assert(type<TN>::cols >= 1);
return std::mdspan<typename T::value_type>(value_ptr(m), type<TN>::cols, type<TN>::rows);
}

template<typename T>
requires (type<std::remove_cvref_t<T>>::rows > 1)
GLM_NODISCARD GLM_FUNC_QUALIFIER GLM_CONSTEXPR auto mdspan(T const& m)
{
using TN = std::remove_cvref_t<T>;
static_assert(type<TN>::cols >= 1);
return std::mdspan<const typename T::value_type>(value_ptr(m), type<TN>::cols, type<TN>::rows);
}

#endif

/// @}
}//namespace glm
Loading
Loading