Comments (6)
Thank you for reporting this. That should be fixed.
If there is a solution without duplicating all declarations, that would be great. But I guess that's actually the right thing to do.
from dbg-macro.
I think that alternative is using one big function pretty_print with constexpr_if branches. I used it in another project. Easy to maintain, easy to understand. But need to bump std to c++17. I think that for this project it's unwanted.
template<typename Field>
inline void process_field( const size_t depth, std::ostream& ss, const char* field_name, Field&& field )
{
if constexpr( is_element_container_v<Field> || is_key_value_container_v<Field> || is_pair_v<Field> || is_tuple_v<Field> )
{
if constexpr( is_element_container_v<Field> )
{
constexpr bool is_simple_element = is_simple_type_v<typename remove_cvref_t<Field>::value_type>;
...
}
else if constexpr( is_key_value_container_v<Field> )
{
...
}
else if constexpr( is_pair_v<Field> )
{
...
}
else if constexpr( is_tuple_v<Field> )
{
process_tuple_fields( depth + 1, ss, field );
}
else
{
static_assert( !std::is_same_v<Field,Field>, "We shouldn't be here! Something went wrong." );
}
}
else if constexpr( has_dereference_operator_v<remove_cvref_t<Field>> )
{
if( !field )
{
apply_depth();
append_field_name();
ss << "nullptr";
}
else
{
process_field( depth, ss, field_name, *field );
}
}
else if constexpr( has_ostream_operator_v<Field> )
{
...
}
else if constexpr( std::is_enum_v<remove_cvref_t<Field>> )
{
...
}
else
{
static_assert( !std::is_same_v<Field,Field>, "Given type is not supported. Please overload std::ostream operator or something." );
}
}
from dbg-macro.
Yes. I would like to maintain C++11 backwards compatibility.
from dbg-macro.
Hi, are you planning to fix that issue?
I guess it's kinda important to be able to print nested containers.
I can also add that it doesn't work well with tuples of containers:
tuple<vector<int>>hm{{1}};
dbg(hm);
outputs a lot of errors.
If not, IMHO it would be great to add a message which says this type is not supported or something. Currently it breaks the compilation.
from dbg-macro.
Hi, are you planning to fix that issue?
Yes, this should be fixed. We can go the easy way for now and duplicate all declarations. Any help would be very much appreciated.
from dbg-macro.
from dbg-macro.
Related Issues (20)
- Windows Supported? HOT 14
- How about output "{?}" string for unknown types instead of failing with static assert? HOT 2
- Allow specifying the output stream HOT 9
- Is support it for android ? HOT 2
- Is it possible to allow variadic template expansion? HOT 8
- VS2015:error C2912 HOT 5
- debug print on some condition HOT 3
- use in Qt HOT 1
- Add output level HOT 2
- `Type does not support the << ostream operator` on custom type HOT 10
- multithread support HOT 1
- Support always on colors HOT 2
- Nested dbg(...) expansion as not expected HOT 2
- How to force print the full content, not the one with ellipsis HOT 3
- Support for container adapters HOT 1
- Fails with Eigen matrices HOT 7
- Suggest /usr/local/include instead of /usr/include HOT 3
- Report a compiling error with old GCC version (GCC 4.8.5) HOT 1
- Some enhancement proposals for CMake based usecases HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dbg-macro.