{"action":"created","issue":{"url":"https://api.github.com/repos/nlohmann/json/issues/338","repository_url":"https://api.github.com/repos/nlohmann/json","labels_url":"https://api.github.com/repos/nlohmann/json/issues/338/labels{/name}","comments_url":"https://api.github.com/repos/nlohmann/json/issues/338/comments","events_url":"https://api.github.com/repos/nlohmann/json/issues/338/events","html_url":"https://github.com/nlohmann/json/pull/338","id":183944166,"number":338,"title":"Feature/user defined types","user":{"login":"theodelrieu","id":15652306,"avatar_url":"https://avatars.githubusercontent.com/u/15652306?v=3","gravatar_id":"","url":"https://api.github.com/users/theodelrieu","html_url":"https://github.com/theodelrieu","followers_url":"https://api.github.com/users/theodelrieu/followers","following_url":"https://api.github.com/users/theodelrieu/following{/other_user}","gists_url":"https://api.github.com/users/theodelrieu/gists{/gist_id}","starred_url":"https://api.github.com/users/theodelrieu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theodelrieu/subscriptions","organizations_url":"https://api.github.com/users/theodelrieu/orgs","repos_url":"https://api.github.com/users/theodelrieu/repos","events_url":"https://api.github.com/users/theodelrieu/events{/privacy}","received_events_url":"https://api.github.com/users/theodelrieu/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/nlohmann/json/labels/enhancement","name":"enhancement","color":"207de5"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2016-10-19T12:11:15Z","updated_at":"2016-10-20T10:29:02Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/nlohmann/json/pulls/338","html_url":"https://github.com/nlohmann/json/pull/338","diff_url":"https://github.com/nlohmann/json/pull/338.diff","patch_url":"https://github.com/nlohmann/json/pull/338.patch"},"body":"WIP: This PR is **NOT** ready to be merged, its purpose is to facilitate review/discussions.\r\n\r\n## Files to change\r\n\r\nThere are currently two files which need to be edited:\r\n\r\n1. [`src/json.hpp.re2c`](https://github.com/nlohmann/json/blob/master/src/json.hpp.re2c) (note the `.re2c` suffix) - This file contains a comment section which describes the JSON lexic. This section is translated by [`re2c`](http://re2c.org) into file [`src/json.hpp`](https://github.com/nlohmann/json/blob/master/src/json.hpp) which is plain \"vanilla\" C++11 code. (In fact, the generated lexer consists of some hundred lines of `goto`s, which is a hint you never want to edit this file...).\r\n\r\n   If you only edit file `src/json.hpp` (without the `.re2c` suffix), your changes will be overwritten as soon as the lexer is touched again. To generate the `src/json.hpp` file which is actually used during compilation of the tests and all other code, please execute\r\n\r\n   ```sh\r\n   make re2c\r\n   ```\r\n\r\n   To run [`re2c`](http://re2c.org) and generate/overwrite file `src/json.hpp` with your changes in file `src/json.hpp.re2c`.\r\n\r\n\r\n2. [`test/src/unit.cpp`](https://github.com/nlohmann/json/blob/master/test/unit.cpp) - This contains the [Catch](https://github.com/philsquared/Catch) unit tests which currently cover [100 %](https://coveralls.io/github/nlohmann/json) of the library's code.\r\n\r\n   If you add or change a feature, please also add a unit test to this file. The unit tests can be compiled with\r\n\r\n   ```sh\r\n   make\r\n   ```\r\n\r\n   and can be executed with\r\n\r\n   ```sh\r\n   ./json_unit\r\n   ```\r\n\r\n   The test cases are also executed with several different compilers on [Travis](https://travis-ci.org/nlohmann/json) once you open a pull request.\r\n\r\nPlease understand that I cannot accept pull requests changing only file `src/json.hpp`.\r\n\r\n\r\n## Note\r\n\r\n- If you open a pull request, the code will be automatically tested with [Valgrind](http://valgrind.org)'s Memcheck tool to detect memory leaks. Please be aware that the execution with Valgrind _may_ in rare cases yield different behavior than running the code directly. This can result in failing unit tests which run successfully without Valgrind.\r\n\r\n## Please don't\r\n\r\n- Only make changes to file `src/json.hpp` -- please read the paragraph above and understand why `src/json.hpp.re2c` exists.\r\n- The C++11 support varies between different **compilers** and versions. Please note the [list of supported compilers](https://github.com/nlohmann/json/blob/master/README.md#supported-compilers). Some compilers like GCC 4.8 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support. Please refrain from proposing changes that work around these compiler's limitations with `#ifdef`s or other means.\r\n- Specifically, I am aware of compilation problems with **Microsoft Visual Studio** (there even is an [issue label](https://github.com/nlohmann/json/issues?utf8=✓&q=label%3A%22visual+studio%22+) for these kind of bugs). I understand that even in 2016, complete C++11 support isn't there yet. But please also understand that I do not want to drop features or uglify the code just to make Microsoft's sub-standard compiler happy. The past has shown that there are ways to express the functionality such that the code compiles with the most recent MSVC - unfortunately, this is not the main objective of the project.\r\n- Please refrain from proposing changes that would **break [JSON](http://json.org) conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.\r\n- Please do not open pull requests that address **multiple issues**.\r\n"},"comment":{"url":"https://api.github.com/repos/nlohmann/json/issues/comments/255069314","html_url":"https://github.com/nlohmann/json/pull/338#issuecomment-255069314","issue_url":"https://api.github.com/repos/nlohmann/json/issues/338","id":255069314,"user":{"login":"gnzlbg","id":904614,"avatar_url":"https://avatars.githubusercontent.com/u/904614?v=3","gravatar_id":"","url":"https://api.github.com/users/gnzlbg","html_url":"https://github.com/gnzlbg","followers_url":"https://api.github.com/users/gnzlbg/followers","following_url":"https://api.github.com/users/gnzlbg/following{/other_user}","gists_url":"https://api.github.com/users/gnzlbg/gists{/gist_id}","starred_url":"https://api.github.com/users/gnzlbg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gnzlbg/subscriptions","organizations_url":"https://api.github.com/users/gnzlbg/orgs","repos_url":"https://api.github.com/users/gnzlbg/repos","events_url":"https://api.github.com/users/gnzlbg/events{/privacy}","received_events_url":"https://api.github.com/users/gnzlbg/received_events","type":"User","site_admin":false},"created_at":"2016-10-20T10:29:02Z","updated_at":"2016-10-20T10:29:02Z","body":"I think @d-frey wanted to be able to serialize/deserialize the same type in different ways to json objects. I agree with him in that to do that the best thing to do is to have a template parameter that controls this in `basic_json<..., JSONSerialization = json_traits>`, but obviously we should give it a good default value that does the right thing for the 99% of the time in which one doesn't care. \r\n\r\nWe could also, inside `basic_json`, try to use the trait first, and if that fails, try to fall back to ADL. So that users can always use ADL but have an easy way to override it (e.g. they would only need to define a trait for the particular type they want to override, but everything else would still work through ADL in the same way). \r\n\r\nIt takes a lot of time and effort (and rewrites) to experiment with these things, but I guess once we get a bit of experience with it the best solution would become more clear."}}
{"actor":{"display_login":"gnzlbg"}}