{"action":"created","comment":{"url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/comments/213362355","pull_request_review_id":150181283,"id":213362355,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMzM2MjM1NQ==","diff_hunk":"@@ -0,0 +1,574 @@\n+//\n+// Copyright Codeplay Software, Ltd.\n+// Author: Christopher Di Bella\n+//\n+// Licensed under the Apache License, Version 2.0 (the \"License\");\n+// you may not use this file except in compliance with the License.\n+// You may obtain a copy of the License at\n+//\n+//     http://www.apache.org/licenses/LICENSE-2.0\n+//\n+// Unless required by applicable law or agreed to in writing, software\n+// distributed under the License is distributed on an \"AS IS\" BASIS,\n+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+// See the License for the specific language governing permissions and\n+// limitations under the License.\n+//\n+#ifndef AMCPP_WARMUP_VEC_HPP\n+#define AMCPP_WARMUP_VEC_HPP\n+\n+#include <algorithm>\n+#include <array>\n+#include <cstddef>\n+#include <gsl/gsl>\n+#include <iterator>\n+#include <limits>\n+#include <numeric>\n+#include <type_traits>\n+\n+// Due to the advanced nature of the iterator constructor, it is turned off by default (as are all\n+// tests that depend on it). When you are ready to work on the iterator constructor, un-comment this\n+// macro.\n+#define AMCPP_WARMUP_ENABLE_ITERATOR_CONSTRUCTOR\n+\n+// Due to the advanced nature of the range constructor, it is turned off by default (as are all\n+// tests that depend on it). When you are ready to work on the iterator constructor, un-comment this\n+// macro.\n+#define AMCPP_WARMUP_ENABLE_RANGE_CONSTRUCTOR\n+\n+namespace amcpp {\n+\t/// \\brief A mathematical vector type.\n+\t/// \\tparam T The value type of the vector.\n+\t/// \\tparam N The vector's dimension.\n+\t/// \\pre N >= 0\n+\t/// \\note Extension: Ensure that N >= 0.\n+\t/// \\see http://tutorial.math.lamar.edu/Classes/CalcII/VectorsIntro.aspx\n+\t///\n+\ttemplate <typename T, std::ptrdiff_t N>\n+\tclass vec {\n+\tpublic:\n+\t\tusing value_type = T;\n+\t\tusing difference_type = std::ptrdiff_t;\n+\t\tusing iterator = typename std::array<T, N>::iterator;\n+\t\tusing const_iterator = typename std::array<T, N>::const_iterator;\n+\t\tusing reverse_iterator = typename std::array<T, N>::reverse_iterator;\n+\t\tusing const_reverse_iterator = typename std::array<T, N>::const_reverse_iterator;\n+\n+\t\t/// \\brief Constructs an object of type vec<T, N>, such that all elements have been\n+\t\t///        value-initialised.\n+\t\t/// \\see https://en.cppreference.com/w/cpp/language/value_initialization\n+\t\t/// \\note Extension: This overload only participates in overload resolution if\n+\t\t///                  std::is_default_constructible_v<T> == true.\n+\t\t///\n+\t\tconstexpr vec() = default;\n+\t\t\n+\t\t/// \\brief Constructs an object of type vec<T, N>, such that all elements are equal to `value`.\n+\t\t/// \\param value The value to initialise each element of the vector object with.\n+\t\t/// \\note Extension: This overload only participates in overload resolution if\n+\t\t///                  std::is_copy_assignable_v<T> == true.\n+\t\t///\n+\t\texplicit vec(T const& value)\n+\t\t\t: data_{}\n+\t\t{ std::fill(std::begin(data_), std::end(data_), value); }\n+\t\t\n+\t\t/// \\brief Constructs an object of type vec<T, N>, such that the first n elements are equal to\n+\t\t///        `value1`, and the remainder are initialised with `value2`.\n+\t\t/// \\param n The number of elements to initialise with value1.\n+\t\t/// \\param value1 The value of the first n elements.\n+\t\t/// \\param value2 The value of the last N - n elements.\n+\t\t/// \\pre 0 < n.\n+\t\t///\n+\t\texplicit vec(std::ptrdiff_t n, T const& value1, T const& value2 = T{})\n+\t\t\t: data_{}\n+\t\t{\n+\t\t\tExpects(0 < n);\n+\t\t\tauto begin = std::fill_n(std::begin(data_), n, value1);\n+\t\t\tstd::fill(begin, std::end(data_), value2);\n+\t\t}\n+\n+#ifdef AMCPP_WARMUP_ENABLE_ITERATOR_CONSTRUCTOR\n+\t\t/// \\brief Constructs an object of type vec<T, N> with the contents of the range [first, last).\n+\t\t/// \\param first An iterator to the beginning of the range [first, last).\n+\t\t/// \\param last An iterator to one past the end of the range [first, last).\n+\t\t/// \\note This overload only participates in overload resolution if InputIterator has a member\n+\t\t///       type 'iterator_category' that is derived from std::input_iterator_tag. Unlike other\n+\t\t///       \"this overload only participates...\", this is not an extension: it is a requirement\n+\t\t///       of the constructor for it to compile.\n+\t\t/// \\see http://en.cppreference.com/w/cpp/language/sfinae\n+\t\t/// \\see https://en.cppreference.com/w/cpp/header/type_traits\n+\t\t/// \\see https://en.cppreference.com/w/cpp/iterator/iterator_tags\n+\t\t///\n+\t\ttemplate <typename InputIterator,\n+\t\t\ttypename = std::enable_if_t<\n+\t\t\t\tstd::is_base_of_v<\n+\t\t\t\t\tstd::input_iterator_tag,\n+\t\t\t\t\ttypename std::iterator_traits<InputIterator>::iterator_category>>>\n+\t\texplicit vec(InputIterator first, InputIterator last)\n+\t\t\t: data_{}\n+\t\t{\n+\t\t\tfor (auto n = std::ptrdiff_t{0}; first != last && n < N; ++first, (void)++n) {\n+\t\t\t\tdata_[n] = *first;\n+\t\t\t}\n+\t\t}\n+#endif // AMCPP_WARMUP_ENABLE_ITERATOR_CONSTRUCTOR\n+\n+#ifdef AMCPP_WARMUP_ENABLE_RANGE_CONSTRUCTOR\n+\t\t/// \\brief Constructs an object of type vec<T, N> with the contents of the range `r`. For the\n+\t\t///        purposes of this exercise, a range can be thought of as any object that can be\n+\t\t///        passed to std::begin and std::end, and returns an iterator.\n+\t\t/// \\note This overload only participates in overload resolution if InputRange has a member\n+\t\t///       type 'iterator', that has a member type iterator_category' that is derived from\n+\t\t///       std::input_iterator_tag. Unlike other \"this overload only participates...\", this is\n+\t\t///       not an extension: it is a requirement of the constructor for it to compile.\n+\t\t/// \\see http://en.cppreference.com/w/cpp/language/sfinae\n+\t\t/// \\see https://en.cppreference.com/w/cpp/header/type_traits\n+\t\t/// \\see https://en.cppreference.com/w/cpp/iterator/iterator_tags\n+\t\t///\n+\t\ttemplate <typename InputRange,\n+\t\t\ttypename = std::enable_if_t<not std::is_same_v<std::remove_reference_t<InputRange>, T>>,\n+\t\t\ttypename = std::enable_if_t<\n+\t\t\t\tstd::is_base_of_v<\n+\t\t\t\t\tstd::input_iterator_tag,\n+\t\t\t\t\ttypename std::iterator_traits<typename std::remove_reference_t<InputRange>::iterator>::iterator_category>>>\n+\t\texplicit vec(InputRange&& r)\n+\t\t\t: vec(std::begin(r), std::end(r))\n+\t\t{}\n+#endif // AMCPP_WARMUP_ENABLE_RANGE_CONSTRUCTOR\n+\n+\t\t/// \\brief Computes the lexicographical sum of two vectors.\n+\t\t/// \\param v\n+\t\t/// \\returns *this\n+\t\t/// \\note Extension 1: Generalise so that you can take the sum of vectors with different value\n+\t\t///                    types.\n+\t\t/// \\note Extension 2: Only participates in overload resolution if `*this[0] *= b[0]` is a\n+\t\t///                    valid expression.\n+\t\t///\n+\t\tconstexpr vec& operator+=(vec const& v)\n+\t\t{\n+\t\t\tstd::transform(std::begin(v.data_), std::end(v.data_), cbegin(), begin(), std::plus<>{});\n+\t\t\treturn *this;\n+\t\t}\n+\n+\t\t/// \\brief Computes the lexicographical difference of two vectors.\n+\t\t/// \\param v\n+\t\t/// \\returns *this\n+\t\t/// \\note Extension 1: Generalise so that you can take the difference of vectors with\n+\t\t///                    different value types.\n+\t\t/// \\note Extension 2: Only participates in overload resolution if `*this[0] *= b[0]` is a\n+\t\t///                    valid expression.\n+\t\t///\n+\t\tconstexpr vec& operator-=(vec const& v)\n+\t\t{\n+\t\t\treturn *this += -v;\n+\t\t}\n+\n+\t\t/// \\brief Computes the lexicographical product of two vectors.\n+\t\t/// \\param v\n+\t\t/// \\returns *this\n+\t\t/// \\note Extension 1: Generalise so that you can take the difference of vectors with\n+\t\t///                    different value types.\n+\t\t/// \\note Extension 2: Only participates in overload resolution if `*this[0] *= b[0]` is a\n+\t\t///                    valid expression.\n+\t\t///\n+\t\tconstexpr vec& operator*=(vec const& v)\n+\t\t{\n+\t\t\tstd::transform(std::cbegin(v), std::cend(v), cbegin(), begin(), std::multiplies<>{});\n+\t\t\treturn *this;\n+\t\t}\n+\n+\t\t/// \\brief Computes the scalar product of two vectors.\n+\t\t/// \\param x\n+\t\t/// \\returns *this\n+\t\t/// \\note Extension 1: Generalise so that you can take the scalar product with a type\n+\t\t///                    different to T.\n+\t\t/// \\note Extension 2: Only participates in overload resolution if `*this[0] *= x` is a valid\n+\t\t///                    expression.\n+\t\t///\n+\t\tconstexpr vec& operator*=(T const& x)\n+\t\t{\n+\t\t\tstd::transform(cbegin(), cend(), begin(), [&x](auto const& value) { return x * value; });\n+\t\t\treturn *this;\n+\t\t}\n+\t\t\n+\t\t/// \\brief Returns a reference to the element at specified location pos.\n+\t\t/// \\param pos Position of the element to return.\n+\t\t/// \\returns Reference to the requested element.\n+\t\t/// \\pre 0 <= n < N\n+\t\t///\n+\t\tconstexpr T& operator[](std::ptrdiff_t pos)\n+\t\t{\n+\t\t\treturn subscript_impl(*this, pos);\n+\t\t}\n+\n+\t\t/// \\brief Returns a reference to the element at specified location pos.","path":"include/amcpp/warmup/vec.hpp","position":203,"original_position":203,"commit_id":"62c8f39638b0fb74cdd748d43461858c8f5cf268","original_commit_id":"62c8f39638b0fb74cdd748d43461858c8f5cf268","user":{"login":"kubasz","id":1017004,"node_id":"MDQ6VXNlcjEwMTcwMDQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1017004?v=4","gravatar_id":"","url":"https://api.github.com/users/kubasz","html_url":"https://github.com/kubasz","followers_url":"https://api.github.com/users/kubasz/followers","following_url":"https://api.github.com/users/kubasz/following{/other_user}","gists_url":"https://api.github.com/users/kubasz/gists{/gist_id}","starred_url":"https://api.github.com/users/kubasz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubasz/subscriptions","organizations_url":"https://api.github.com/users/kubasz/orgs","repos_url":"https://api.github.com/users/kubasz/repos","events_url":"https://api.github.com/users/kubasz/events{/privacy}","received_events_url":"https://api.github.com/users/kubasz/received_events","type":"User","site_admin":false},"body":"same","created_at":"2018-08-28T15:29:28Z","updated_at":"2018-08-28T15:33:22Z","html_url":"https://github.com/appliedmoderncpp/generic-programming-2/pull/1#discussion_r213362355","pull_request_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/comments/213362355"},"html":{"href":"https://github.com/appliedmoderncpp/generic-programming-2/pull/1#discussion_r213362355"},"pull_request":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1","id":211459071,"node_id":"MDExOlB1bGxSZXF1ZXN0MjExNDU5MDcx","html_url":"https://github.com/appliedmoderncpp/generic-programming-2/pull/1","diff_url":"https://github.com/appliedmoderncpp/generic-programming-2/pull/1.diff","patch_url":"https://github.com/appliedmoderncpp/generic-programming-2/pull/1.patch","issue_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/1","number":1,"state":"open","locked":false,"title":"Warmup exercise","user":{"login":"cjdb","id":8622748,"node_id":"MDQ6VXNlcjg2MjI3NDg=","avatar_url":"https://avatars3.githubusercontent.com/u/8622748?v=4","gravatar_id":"","url":"https://api.github.com/users/cjdb","html_url":"https://github.com/cjdb","followers_url":"https://api.github.com/users/cjdb/followers","following_url":"https://api.github.com/users/cjdb/following{/other_user}","gists_url":"https://api.github.com/users/cjdb/gists{/gist_id}","starred_url":"https://api.github.com/users/cjdb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjdb/subscriptions","organizations_url":"https://api.github.com/users/cjdb/orgs","repos_url":"https://api.github.com/users/cjdb/repos","events_url":"https://api.github.com/users/cjdb/events{/privacy}","received_events_url":"https://api.github.com/users/cjdb/received_events","type":"User","site_admin":false},"body":"This is a statically-sized mathematical vector that is essentially used to give students a pre-class warmup, so that they can identify the things that they need to catch up on before they attend _Generic Programming 2.0 with Concepts and Ranges_.\r\n\r\nThis pull request includes a potential solution to the vector implementation, along with some light testing. A readme will appear in a second PR, along with the 'scrubbing' of the solution (it'll just be moved to a separate branch).\r\n\r\nAbsolutely no concepts are used in this solution: it is a pre-concepts class warm-up, and only targets the prerequisites for the class, rather than getting students to research features that they'll be learning about ahead of time.","created_at":"2018-08-28T15:13:33Z","updated_at":"2018-08-28T15:33:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4e665bad9d3336b3704da75df7165238847627e1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1/commits","review_comments_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1/comments","review_comment_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/comments{/number}","comments_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/1/comments","statuses_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/statuses/62c8f39638b0fb74cdd748d43461858c8f5cf268","head":{"label":"appliedmoderncpp:warmup","ref":"warmup","sha":"62c8f39638b0fb74cdd748d43461858c8f5cf268","user":{"login":"appliedmoderncpp","id":27881596,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3ODgxNTk2","avatar_url":"https://avatars1.githubusercontent.com/u/27881596?v=4","gravatar_id":"","url":"https://api.github.com/users/appliedmoderncpp","html_url":"https://github.com/appliedmoderncpp","followers_url":"https://api.github.com/users/appliedmoderncpp/followers","following_url":"https://api.github.com/users/appliedmoderncpp/following{/other_user}","gists_url":"https://api.github.com/users/appliedmoderncpp/gists{/gist_id}","starred_url":"https://api.github.com/users/appliedmoderncpp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/appliedmoderncpp/subscriptions","organizations_url":"https://api.github.com/users/appliedmoderncpp/orgs","repos_url":"https://api.github.com/users/appliedmoderncpp/repos","events_url":"https://api.github.com/users/appliedmoderncpp/events{/privacy}","received_events_url":"https://api.github.com/users/appliedmoderncpp/received_events","type":"Organization","site_admin":false},"repo":{"id":146287618,"node_id":"MDEwOlJlcG9zaXRvcnkxNDYyODc2MTg=","name":"generic-programming-2","full_name":"appliedmoderncpp/generic-programming-2","owner":{"login":"appliedmoderncpp","id":27881596,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3ODgxNTk2","avatar_url":"https://avatars1.githubusercontent.com/u/27881596?v=4","gravatar_id":"","url":"https://api.github.com/users/appliedmoderncpp","html_url":"https://github.com/appliedmoderncpp","followers_url":"https://api.github.com/users/appliedmoderncpp/followers","following_url":"https://api.github.com/users/appliedmoderncpp/following{/other_user}","gists_url":"https://api.github.com/users/appliedmoderncpp/gists{/gist_id}","starred_url":"https://api.github.com/users/appliedmoderncpp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/appliedmoderncpp/subscriptions","organizations_url":"https://api.github.com/users/appliedmoderncpp/orgs","repos_url":"https://api.github.com/users/appliedmoderncpp/repos","events_url":"https://api.github.com/users/appliedmoderncpp/events{/privacy}","received_events_url":"https://api.github.com/users/appliedmoderncpp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/appliedmoderncpp/generic-programming-2","description":"Content for the CppCon 2018 course, Generic Programming 2.0 with Concepts and Ranges.","fork":false,"url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2","forks_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/forks","keys_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/teams","hooks_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/hooks","issue_events_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/events{/number}","events_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/events","assignees_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/assignees{/user}","branches_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/branches{/branch}","tags_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/tags","blobs_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/refs{/sha}","trees_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/statuses/{sha}","languages_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/languages","stargazers_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/stargazers","contributors_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/contributors","subscribers_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/subscribers","subscription_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/subscription","commits_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/commits{/sha}","git_commits_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/commits{/sha}","comments_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/comments{/number}","issue_comment_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/comments{/number}","contents_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/contents/{+path}","compare_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/merges","archive_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/downloads","issues_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues{/number}","pulls_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls{/number}","milestones_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/milestones{/number}","notifications_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/labels{/name}","releases_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/releases{/id}","deployments_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/deployments","created_at":"2018-08-27T11:23:05Z","updated_at":"2018-08-27T11:23:18Z","pushed_at":"2018-08-28T15:13:32Z","git_url":"git://github.com/appliedmoderncpp/generic-programming-2.git","ssh_url":"git@github.com:appliedmoderncpp/generic-programming-2.git","clone_url":"https://github.com/appliedmoderncpp/generic-programming-2.git","svn_url":"https://github.com/appliedmoderncpp/generic-programming-2","homepage":"https://cppcon.org/generic-programming-2.0-with-concepts-and-ranges","size":23,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"appliedmoderncpp:master","ref":"master","sha":"9b39d742613a3ed826a28a034deffecff361b4f3","user":{"login":"appliedmoderncpp","id":27881596,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3ODgxNTk2","avatar_url":"https://avatars1.githubusercontent.com/u/27881596?v=4","gravatar_id":"","url":"https://api.github.com/users/appliedmoderncpp","html_url":"https://github.com/appliedmoderncpp","followers_url":"https://api.github.com/users/appliedmoderncpp/followers","following_url":"https://api.github.com/users/appliedmoderncpp/following{/other_user}","gists_url":"https://api.github.com/users/appliedmoderncpp/gists{/gist_id}","starred_url":"https://api.github.com/users/appliedmoderncpp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/appliedmoderncpp/subscriptions","organizations_url":"https://api.github.com/users/appliedmoderncpp/orgs","repos_url":"https://api.github.com/users/appliedmoderncpp/repos","events_url":"https://api.github.com/users/appliedmoderncpp/events{/privacy}","received_events_url":"https://api.github.com/users/appliedmoderncpp/received_events","type":"Organization","site_admin":false},"repo":{"id":146287618,"node_id":"MDEwOlJlcG9zaXRvcnkxNDYyODc2MTg=","name":"generic-programming-2","full_name":"appliedmoderncpp/generic-programming-2","owner":{"login":"appliedmoderncpp","id":27881596,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3ODgxNTk2","avatar_url":"https://avatars1.githubusercontent.com/u/27881596?v=4","gravatar_id":"","url":"https://api.github.com/users/appliedmoderncpp","html_url":"https://github.com/appliedmoderncpp","followers_url":"https://api.github.com/users/appliedmoderncpp/followers","following_url":"https://api.github.com/users/appliedmoderncpp/following{/other_user}","gists_url":"https://api.github.com/users/appliedmoderncpp/gists{/gist_id}","starred_url":"https://api.github.com/users/appliedmoderncpp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/appliedmoderncpp/subscriptions","organizations_url":"https://api.github.com/users/appliedmoderncpp/orgs","repos_url":"https://api.github.com/users/appliedmoderncpp/repos","events_url":"https://api.github.com/users/appliedmoderncpp/events{/privacy}","received_events_url":"https://api.github.com/users/appliedmoderncpp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/appliedmoderncpp/generic-programming-2","description":"Content for the CppCon 2018 course, Generic Programming 2.0 with Concepts and Ranges.","fork":false,"url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2","forks_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/forks","keys_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/teams","hooks_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/hooks","issue_events_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/events{/number}","events_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/events","assignees_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/assignees{/user}","branches_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/branches{/branch}","tags_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/tags","blobs_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/refs{/sha}","trees_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/statuses/{sha}","languages_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/languages","stargazers_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/stargazers","contributors_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/contributors","subscribers_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/subscribers","subscription_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/subscription","commits_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/commits{/sha}","git_commits_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/git/commits{/sha}","comments_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/comments{/number}","issue_comment_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/comments{/number}","contents_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/contents/{+path}","compare_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/merges","archive_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/downloads","issues_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues{/number}","pulls_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls{/number}","milestones_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/milestones{/number}","notifications_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/labels{/name}","releases_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/releases{/id}","deployments_url":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/deployments","created_at":"2018-08-27T11:23:05Z","updated_at":"2018-08-27T11:23:18Z","pushed_at":"2018-08-28T15:13:32Z","git_url":"git://github.com/appliedmoderncpp/generic-programming-2.git","ssh_url":"git@github.com:appliedmoderncpp/generic-programming-2.git","clone_url":"https://github.com/appliedmoderncpp/generic-programming-2.git","svn_url":"https://github.com/appliedmoderncpp/generic-programming-2","homepage":"https://cppcon.org/generic-programming-2.0-with-concepts-and-ranges","size":23,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1"},"html":{"href":"https://github.com/appliedmoderncpp/generic-programming-2/pull/1"},"issue":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/1"},"comments":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/appliedmoderncpp/generic-programming-2/statuses/62c8f39638b0fb74cdd748d43461858c8f5cf268"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"kubasz"}}