Skip to content
Open
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
11 changes: 9 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,16 @@ target_include_directories(

target_compile_features(refl-cpp INTERFACE cxx_std_17)
if (MSVC)
add_compile_options(/W4)
add_compile_options(/W4 /WX)
else()
add_compile_options(-Wall -Wextra -pedantic)
add_compile_options(-Wall -Wextra -pedantic -Wconversion)
if ( NOT ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS "8.0") )
add_compile_options(-pedantic-errors -Werror)
endif()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS "6.0")
# old versions of clang do not recognize invalid missing braces with templated code
add_compile_options(-Wno-missing-braces)
endif()
endif()
# ---- Install ----

Expand Down
2 changes: 1 addition & 1 deletion bench/bench-large-pod-search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ void ProcessClass()
{
if constexpr (refl::descriptor::is_writable(member))
{
auto reader = refl::descriptor::get_reader(member);
auto reader [[maybe_unused]] = refl::descriptor::get_reader(member);
// etc.
}
else if constexpr (! refl::descriptor::has_writer(member))
Expand Down
2 changes: 1 addition & 1 deletion bench/bench-large-pod.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ void ProcessClass()
{
if constexpr (refl::descriptor::is_writable(member))
{
auto reader = refl::descriptor::get_reader(member);
auto reader [[maybe_unused]] = refl::descriptor::get_reader(member);
// etc.
}
else if constexpr (! refl::descriptor::has_writer(member))
Expand Down
2 changes: 1 addition & 1 deletion examples/example-custom-rtti.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ int main()
{
FirstPersonController fpc;
Pawn& pawn = fpc; // refer through parent type
const TypeInfo& pawnTypeInfo = pawn.GetTypeInfo(); // get custom type info
const TypeInfo& pawnTypeInfo [[maybe_unused]] = pawn.GetTypeInfo(); // get custom type info

// access the name through our TypeInfo object
assert(pawnTypeInfo.Name() == "FirstPersonController");
Expand Down
2 changes: 1 addition & 1 deletion examples/example-dao.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ REFL_AUTO(
type(User, Table{"Users"}),
field(id, Column{"ID", DataType::ID}),
field(email, Column{"Email", DataType::TEXT})
);
)

template <typename Member>
constexpr auto make_sql_field_spec(Member)
Expand Down
4 changes: 2 additions & 2 deletions examples/example-partials.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,15 @@ class partial : public refl::runtime::proxy<partial<T>, T>
template <typename Member>
auto& get()
{
constexpr size_t idx = refl::trait::index_of_v<Member, member_list>;
constexpr auto idx = refl::trait::index_of_v<Member, member_list>;
static_assert(idx != -1);
return refl::util::get<idx>(data);
}

template <typename Member>
const auto& get() const
{
constexpr size_t idx = refl::trait::index_of_v<Member, member_list>;
constexpr auto idx = refl::trait::index_of_v<Member, member_list>;
static_assert(idx != -1);
return refl::util::get<idx>(data);
}
Expand Down
2 changes: 1 addition & 1 deletion examples/example-proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ using User = value_proxy<model::User>;

int main()
{
User user{{ 10 }};
User user{{ 10, {} }};

assert(user.id() == 10);
// user.id(10) // fails with a static assertion (is_writable(member))
Expand Down
24 changes: 13 additions & 11 deletions examples/example-struct-of-arrays.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "refl.hpp"
#include <iostream>
#include <vector>
#include <cassert>

/********************************/
template <typename T>
Expand All @@ -22,13 +23,13 @@ struct struct_of_arrays : refl::runtime::proxy<struct_of_arrays<T>, std::remove_
using readable_members = readable_member_list<std::remove_cv_t<T>>;
static_assert(readable_members::size > 0, "Type has no fields!");

struct_of_arrays(size_t capacity = 4)
struct_of_arrays()
{
}

void push_back(const T& value)
{
for_each(readable_members {}, [&](auto member, size_t index) {
for_each(readable_members {}, [&](auto member) {
constexpr auto i = refl::trait::index_of_v<decltype(member), readable_members>;
std::get<i>(storage_).push_back(member(value));
});
Expand All @@ -42,15 +43,6 @@ struct struct_of_arrays : refl::runtime::proxy<struct_of_arrays<T>, std::remove_
});
}

T at(size_t index) const
{
T t{};
for_each(readable_members{}, [&](auto member) {
constexpr auto i = refl::trait::index_of_v<decltype(member), readable_members>;
std::get<i>(storage_).pop_back();
});
}

template <typename Member>
auto& operator[](Member)
{
Expand Down Expand Up @@ -103,6 +95,10 @@ const auto& get(const struct_of_arrays<T>& soa)
return soa[member{}];
}

#if defined(__clang__) || (defined(__GNUG__) && __GNUC__ >= 10)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmismatched-tags"
#endif
namespace std
{
template <typename T>
Expand All @@ -118,6 +114,9 @@ namespace std
using type = decltype(std::declval<struct_of_arrays<T>>()[descriptor{}]);
};
}
#if defined(__clang__) || (defined(__GNUG__) && __GNUC__ >= 10)
#pragma GCC diagnostic pop
#endif

/********************************/

Expand Down Expand Up @@ -164,6 +163,9 @@ int main()

std::cout << "size=" << colors.size() << "\n";
for (size_t i = 0; i < colors.size(); i++) {
assert(red_chan[i] == colors.red(i));
assert(green_chan[i] == colors.green(i));
assert(blue_chan[i] == colors.blue(i));
std::cout << "r=" << red_chan[i] << ",g=" << green_chan[i] << ",b=" << blue_chan[i] << "\n";
}
}
Loading