Rust metaprogramming vs C++
I am considering writing all my new personal projects in Rust instead of C++. So far, the language seems to support my needs pretty well. One thing I am still assessing though is metaprogramming. What I would like to know is how good/ergonomic metaprogramming is in Rust, and how does it compares to C++. proc\_macros looks really powerful and is the first feature people point at to show Rust's capacity in this regard but how far can it replace C++'s TMP? I mean, in C++ you have specialization, powerful CTFE, if constexpr, SFINAE, concepts, structural typing (duck typing) etc. I don't think Rust is able to (or should) have half of these features as most of them depends heavily on the lazy nature of templates but would like to have some of their power available in Rust. So for example, how do I write a proc\_macro that emits an error if a bool constant is false (an actual compile_error! not a panic! in a constant context), similar to a static_assert? Or is it possible to write a macro that takes an expression determines its Type and returns size_of::<Type>()?
Please, elucidate me on the capabilities and pros/cons of metaprogramming in Rust.