From d99bae7284426f814e84a041ab4f8e97c86013a5 Mon Sep 17 00:00:00 2001 From: Anton Bachin Date: Mon, 5 Oct 2015 13:42:11 -0500 Subject: [PATCH] Updated documentation. --- README.md | 4 ++-- doc/CompilerSupport.md | 6 +++++- doc/DesignDecisionsFAQ.md | 2 -- doc/OptInFeatures.md | 21 +++++++++++++++++++++ doc/better-enums.css | 12 ++++++++++++ doc/demo/105-c++17-reflection.md | 29 +++++++---------------------- doc/image/sample.gif | Bin 79608 -> 80774 bytes doc/index.md | 2 +- doc/template/demo.tmpl | 7 +++---- doc/template/ref.tmpl | 2 +- doc/template/version.tmpl | 2 +- doc/tutorial/7-safety.md | 21 +++++---------------- example/105-c++17-reflection.cc | 25 ++++++------------------- 13 files changed, 64 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index b765ef6..245a0e9 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ file. ![Better Enums code overview][sample] -[sample]: https://raw.githubusercontent.com/aantron/better-enums/0.10.1/doc/image/sample.gif +[sample]: https://raw.githubusercontent.com/aantron/better-enums/master/doc/image/sample.gif [![Try online][wandbox-img]][wandbox] [![version 0.10.1][version]][releases] [![BSD license][license-img]][license] @@ -25,7 +25,7 @@ See the [project page][project] for full documentation. [max]: http://aantron.github.io/better-enums/demo/BitSets.html [enforce]: http://aantron.github.io/better-enums/demo/SpecialValues.html [project]: http://aantron.github.io/better-enums -[wandbox]: http://melpon.org/wandbox/permlink/5N9QZYdA5LqWy26R +[wandbox]: http://melpon.org/wandbox/permlink/2QCi3cwQnplAToge [tutorial]: http://aantron.github.io/better-enums#Tutorial [api]: http://aantron.github.io/better-enums/ApiReference.html [releases]: https://github.com/aantron/better-enums/releases diff --git a/doc/CompilerSupport.md b/doc/CompilerSupport.md index 19e7379..d9e6a7f 100644 --- a/doc/CompilerSupport.md +++ b/doc/CompilerSupport.md @@ -2,7 +2,7 @@ Better Enums aims to support all major compilers. It is known to work on: - - clang 3.3 to 3.6 + - clang 3.3 to 3.7 - gcc 4.3 to 5.2 - Visual C++ 2008 to 2015RC. @@ -78,6 +78,10 @@ vc2013 /EHsc /DBETTER_ENUMS_STRICT_CONVERSION vc2012 /EHsc vc2010 /EHsc vc2008 /EHsc +clang++37 -std=c++11 +clang++37 -std=c++11 -DBETTER_ENUMS_STRICT_CONVERSION +clang++37 -std=c++11 -DBETTER_ENUMS_CONSTEXPR_TO_STRING +clang++37 -std=c++98 clang++36 -std=c++11 clang++36 -std=c++11 -DBETTER_ENUMS_STRICT_CONVERSION clang++36 -std=c++11 -DBETTER_ENUMS_CONSTEXPR_TO_STRING diff --git a/doc/DesignDecisionsFAQ.md b/doc/DesignDecisionsFAQ.md index eb04895..2f9113d 100644 --- a/doc/DesignDecisionsFAQ.md +++ b/doc/DesignDecisionsFAQ.md @@ -192,8 +192,6 @@ However, it also introduces some difficulties. - Traits types must be specialized in either the same namespace scope they are declared in, or in an enclosing scope. This makes it impossible to declare an enum and specialize traits for it in a user's custom namespace. -- Traits types are not intuitive for some $cxx users, which would present a - barrier to usage. Despite the disadvantages listed just above, I consider the traits approach interesting — it's a close call. There is an diff --git a/doc/OptInFeatures.md b/doc/OptInFeatures.md index f98dbd2..d89a491 100644 --- a/doc/OptInFeatures.md +++ b/doc/OptInFeatures.md @@ -6,6 +6,27 @@ default. Read this page if you want to enable them. $internal_toc +### Default constructors + +Better Enums generate with inaccessible (private or deleted) default +constructors. This is meant to help control where in your program Better Enums +values are introduced, and thus ensure that only valid, properly initialized +enum values are ever created. + +If you want Better Enums to have a default constructor, you can do something +like the following: + +~~~ +#define BETTER_ENUMS_DEFAULT_CONSTRUCTOR(Enum) \ + public: \ + Enum() = default; + +#include <enum.h> +~~~ + +You can put this in its own header file, and include that header file instead of +including `enum.h` directly. + ### Compile-time name trimming This makes `_to_string` and `_names` `constexpr`, i.e. "full" `constexpr` mode. diff --git a/doc/better-enums.css b/doc/better-enums.css index 7d5d1f8..f276af8 100644 --- a/doc/better-enums.css +++ b/doc/better-enums.css @@ -55,6 +55,18 @@ code, samp { margin-right: 150px; } +.main .container > * { + max-width: 41em; +} + +.index .main .container > * { + max-width: none; +} + +.main .container > .contents { + max-width: none; +} + @media (max-width: 1400px) { .container { margin-left: auto; diff --git a/doc/demo/105-c++17-reflection.md b/doc/demo/105-c++17-reflection.md index 779a25a..464cb0d 100644 --- a/doc/demo/105-c++17-reflection.md +++ b/doc/demo/105-c++17-reflection.md @@ -44,14 +44,12 @@ Resulting in the values `3`, `Foo::A`, and `"B"`, respectively. --- -The optional Better Enums header file [`extra/better-enums/n4428.h`][header] -implements this interface, though with two necessary differences. +The interface is implemented in the optional header file +[`extra/better-enums/n4428.h`][header]. There are two necessary differences. -1. The interface is only available for Better Enums, i.e. enums declared through - the `BETTER_ENUM` macro. This is because the macro is what generates the - information necessary for reflection. -2. The type of `identifier` is `const char*`, not the ${cxx17} proposed - `string_literal`. +1. The interface is only available for enums declared through the `BETTER_ENUM` + macro. This is because the macro is what generates the information necessary + for reflection. ### Demo @@ -101,24 +99,11 @@ Let's declare an enum: That prints `Blue`, as you would expect. ---- - -So, Better Enums can be used in $cxx11 to test N4428, and maybe start developing -libraries on top of it. N4428 is very low-level, so it needs additional code -over it to be truly useful. Whether developing now is a good idea is debatable, -since N4428 is still only a proposal. But, it's an interesting thing to -consider. - -Also, Better Enums can be implemented almost completely *in terms of* N4428, so -the two interfaces are in some vaguely mathematical sense "equivalent." If N4428 -is accepted, I may implement a variant of Better Enums on top of it, since it -will remove many limitations. - ### Quirk The reason for the `#define` in the code above is that there is one quirk: the interface above is available only for Better Enums for which -[compile-time name trimming][slow-enum] is enabled, i.e. those declared when +[compile-time name trimming][slow-enum] is enabled — those declared when `BETTER_ENUMS_CONSTEXPR_TO_STRING` was defined, or declared with the `SLOW_ENUM` variant of `BETTER_ENUM`. As mentioned on the linked page, the reason compile-time name trimming is not the default is that, while still pretty fast, @@ -183,7 +168,7 @@ enums, I will try to implement those as well. [n3815]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html [slow-enum]: ${prefix}OptInFeatures.html#CompileTimeNameTrimming [header]: https://github.com/aantron/better-enums/blob/$ref/extra/better-enums/n4428.h -[live]: http://melpon.org/wandbox/permlink/pNEx7UEWqDtqFAwm +[live]: http://melpon.org/wandbox/permlink/QelcwZNLi4gIx8Ux %% description = Approximate implementation of N4428 enum reflection based on Better Enums. diff --git a/doc/image/sample.gif b/doc/image/sample.gif index db7c96b9abd5acc333c86ee2564884db7f99f57a..65813c5f76b18aa942fa83fbb8c7e8ce39afd9e9 100644 GIT binary patch delta 26425 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

ZW}Op!-^?_ULPRTl4c0Ph0t z-wPgt-!-wp0|f{~y&9p3V7VdpzX9?Qno`D-?3|bhExmnL=kj6Ef#0^q^`+8_s5q4C Fe*q0h$-V#p delta 25797 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%0D?wABGC%jnG*JbuzEvn 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 XhHnAiN7cLzge_r9&7vTf1JC&{0z!SZ diff --git a/doc/index.md b/doc/index.md index 01f671d..1fb7e1a 100644 --- a/doc/index.md +++ b/doc/index.md @@ -72,7 +72,7 @@ fast, portable, and documented exhaustively. To use it, just include enum.h. Try it live online in -[Wandbox](http://melpon.org/wandbox/permlink/wICNzu2LW2vEgqzh), or begin the +[Wandbox](http://melpon.org/wandbox/permlink/6kFervewqeDsNAGu), or begin the [tutorial](${prefix}tutorial/HelloWorld.html)!

diff --git a/doc/template/demo.tmpl b/doc/template/demo.tmpl index 56220fa..7218c78 100644 --- a/doc/template/demo.tmpl +++ b/doc/template/demo.tmpl @@ -1,8 +1,7 @@

- This page is an advanced demo showing the kind of code you can write on top of - Better Enums. It's a valid program — you can - download it and try it out. The program runs as part of - the automated test suite. + This is an example of code you can write on top of Better Enums. It's a valid + program — you can download it and try it out. The + program is also part of the test suite.

$demo_body diff --git a/doc/template/ref.tmpl b/doc/template/ref.tmpl index 8b25206..142464b 100644 --- a/doc/template/ref.tmpl +++ b/doc/template/ref.tmpl @@ -1 +1 @@ -master \ No newline at end of file +0.11.0 \ No newline at end of file diff --git a/doc/template/version.tmpl b/doc/template/version.tmpl index 71172b4..142464b 100644 --- a/doc/template/version.tmpl +++ b/doc/template/version.tmpl @@ -1 +1 @@ -0.10.1 \ No newline at end of file +0.11.0 \ No newline at end of file diff --git a/doc/tutorial/7-safety.md b/doc/tutorial/7-safety.md index ef0f17f..2c02aa2 100644 --- a/doc/tutorial/7-safety.md +++ b/doc/tutorial/7-safety.md @@ -49,27 +49,16 @@ The reason this is not enabled by default is explained in the reference page on ### Default constructor -Better Enums don't have a default constructor, for three reasons. - - - Better Enums is a library that can't know what your application would like - the default value to be for each enum, or whether you even want one. - - I chose not to leave the default value undefined, because the idea is to - encourage the convention that whenever a Better Enum exists, it has a valid - value. This is borrowed from typed functional programming. - - Better Enums is still under development, and this option is the most - future-proof. - -So, if you uncomment this code, the file won't compile: +Better Enums generate without a default constructor. The purpose is to support +the convention where if a Better Enum exists, then it has a valid value. So, if +you uncomment this code, the program won't compile: ~~~comment Channel channel; ~~~ -This may be too strict, and I may relax it in the future. In the meantime, the -solution sketched in the [special values demo](${prefix}demo/SpecialValues.html) -can replace default constructors for some purposes, and in a more flexible way. -I may eventually have the default constructor calling a template function like -the one in that demo. +If this is too strict for your project, you can relax it as described +[here](${prefix}OptInFeatures.html#DefaultConstructors). --- diff --git a/example/105-c++17-reflection.cc b/example/105-c++17-reflection.cc index 49b487f..5f6029c 100644 --- a/example/105-c++17-reflection.cc +++ b/example/105-c++17-reflection.cc @@ -40,14 +40,12 @@ // // Resulting in the values 3, Foo::A, and "B", respectively. -// The optional Better Enums header file extra/better-enums/n4428.h implements -// this interface, though with two necessary differences. +// The interface is implemented in the optional header file +// extra/better-enums/n4428.h. There are two necessary differences. // -// 1. The interface is only available for Better Enums, i.e. enums declared -// through the BETTER_ENUM macro. This is because the macro is what -// generates the information necessary for reflection. -// 2. The type of identifier is const char*, not the ${cxx17} proposed -// string_literal. +// 1. The interface is only available for enums declared through the +// BETTER_ENUM macro. This is because the macro is what generates the +// information necessary for reflection. // // Demo // @@ -95,23 +93,12 @@ int main() } // That prints Blue, as you would expect. - -// So, Better Enums can be used in C++11 to test N4428, and maybe start -// developing libraries on top of it. N4428 is very low-level, so it needs -// additional code over it to be truly useful. Whether developing now is a good -// idea is debatable, since N4428 is still only a proposal. But, it's an -// interesting thing to consider. -// -// Also, Better Enums can be implemented almost completely in terms of N4428, so -// the two interfaces are in some vaguely mathematical sense "equivalent." If -// N4428 is accepted, I may implement a variant of Better Enums on top of it, -// since it will remove many limitations. // // Quirk // // The reason for the #define in the code above is that there is one quirk: the // interface above is available only for Better Enums for which compile-time -// name trimming is enabled, i.e. those declared when +// name trimming is enabled - those declared when // BETTER_ENUMS_CONSTEXPR_TO_STRING was defined, or declared with the SLOW_ENUM // variant of BETTER_ENUM. As mentioned on the linked page, the reason // compile-time name trimming is not the default is that, while still pretty