Precise and Flat Reflection (ex Magic Get, ex PODs Flat Reflection)
This C++14 library is meant for accessing structure elements by index and providing other std::tuple like methods for user defined types without any macro or boilerplate code.
Test results
| Branches | Build | Tests coverage | More info |
|---|---|---|---|
| Develop: | ![]() |
||
| Master: | ![]() |
Motivating Example #0
// requires: C++14
#include <iostream>
#include <string>
#include "boost/pfr/precise.hpp"
struct some_person {
std::string name;
unsigned birth_year;
};
int main() {
some_person val{"Edgar Allan Poe", 1809};
std::cout << boost::pfr::get<0>(val) // No macro!
<< " was born in " << boost::pfr::get<1>(val); // Works with any aggregate initializables!
}Outputs:
Edgar Allan Poe was born in 1809
Motivating Example #1
// requires: C++14
#include <iostream>
#include "boost/pfr/precise.hpp"
struct my_struct { // no ostream operator defined!
int i;
char c;
double d;
};
int main() {
using namespace boost::pfr::ops; // out-of-the-box ostream operator for all PODs!
my_struct s{100, 'H', 3.141593};
std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
<< " fields: " << s << "\n";
}
Outputs:
my_struct has 3 fields: {100, H, 3.14159}
Motivating Example #2
// requires: C++14
#include <iostream>
#include "boost/pfr/precise.hpp"
struct my_struct { // no ostream operator defined!
std::string s;
int i;
};
int main() {
using namespace boost::pfr::ops; // out-of-the-box ostream operators for aggregate initializables!
my_struct s{{"Das ist fantastisch!"}, 100};
std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
<< " fields: " << s << "\n";
}
Outputs:
my_struct has 2 fields: {"Das ist fantastisch!", 100}
Requirements and Limitations
General:
- C++14 compatible compiler (GCC-5.0+, Clang, Visual Studio 2017 with /std:c++latest or /std:c++17, ...)
- Static variables are ignored
- T must be constexpr aggregate initializable and must not contain references nor bitfields
License
Distributed under the Boost Software License, Version 1.0.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.


