{"action":"created","issue":{"url":"https://api.github.com/repos/mapbox/variant/issues/88","labels_url":"https://api.github.com/repos/mapbox/variant/issues/88/labels{/name}","comments_url":"https://api.github.com/repos/mapbox/variant/issues/88/comments","events_url":"https://api.github.com/repos/mapbox/variant/issues/88/events","html_url":"https://github.com/mapbox/variant/issues/88","id":130307254,"number":88,"title":"Noexcept on operator=() is wrong","user":{"login":"joto","id":113756,"avatar_url":"https://avatars.githubusercontent.com/u/113756?v=3","gravatar_id":"","url":"https://api.github.com/users/joto","html_url":"https://github.com/joto","followers_url":"https://api.github.com/users/joto/followers","following_url":"https://api.github.com/users/joto/following{/other_user}","gists_url":"https://api.github.com/users/joto/gists{/gist_id}","starred_url":"https://api.github.com/users/joto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joto/subscriptions","organizations_url":"https://api.github.com/users/joto/orgs","repos_url":"https://api.github.com/users/joto/repos","events_url":"https://api.github.com/users/joto/events{/privacy}","received_events_url":"https://api.github.com/users/joto/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2016-02-01T09:26:03Z","updated_at":"2016-02-01T11:06:08Z","closed_at":null,"body":"I think the `noexcept` on `operator()` [here](https://github.com/mapbox/variant/blob/c4e864cc122c4fcc9b1f7a8f68a34e465df9f922/variant.hpp#L644) is wrong. There are several operations involved which all might fail."},"comment":{"url":"https://api.github.com/repos/mapbox/variant/issues/comments/177916912","html_url":"https://github.com/mapbox/variant/issues/88#issuecomment-177916912","issue_url":"https://api.github.com/repos/mapbox/variant/issues/88","id":177916912,"user":{"login":"lightmare","id":1419852,"avatar_url":"https://avatars.githubusercontent.com/u/1419852?v=3","gravatar_id":"","url":"https://api.github.com/users/lightmare","html_url":"https://github.com/lightmare","followers_url":"https://api.github.com/users/lightmare/followers","following_url":"https://api.github.com/users/lightmare/following{/other_user}","gists_url":"https://api.github.com/users/lightmare/gists{/gist_id}","starred_url":"https://api.github.com/users/lightmare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lightmare/subscriptions","organizations_url":"https://api.github.com/users/lightmare/orgs","repos_url":"https://api.github.com/users/lightmare/repos","events_url":"https://api.github.com/users/lightmare/events{/privacy}","received_events_url":"https://api.github.com/users/lightmare/received_events","type":"User","site_admin":false},"created_at":"2016-02-01T11:06:08Z","updated_at":"2016-02-01T11:06:08Z","body":"In that case, just remove both conversion-assignment operators, they're not needed -- actually the compiler will generate exactly the code in the first, and better than the second:\r\n```c++\r\nv = x; // conversion constructor from decltype(x) must be available\r\n// the compiler will do\r\nv = v(x); // i.e. construct a temporary variant and move-assign =(v&&)\r\n```"}}