Last active
February 6, 2017 21:12
-
-
Save timshen91/c939a7f3b295646e0cf049570d182027 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <utility> | |
#include <vector> | |
template<typename UnderlyingRangeType> | |
struct some_range_view { | |
some_range_view(UnderlyingRangeType range) : storage_(std::forward<UnderlyingRangeType>(range)) {} | |
UnderlyingRangeType storage_; | |
}; | |
template<typename UnderlyingRangeType> | |
// UnderlyingRangeType&& has more language magic in it, namely "forwarding reference". | |
some_range_view<UnderlyingRangeType> make_some_range_view(UnderlyingRangeType&& range) { | |
return some_range_view<UnderlyingRangeType>(std::forward<UnderlyingRangeType>(range)); | |
} | |
int main() { | |
{ | |
auto view = make_some_range_view(std::vector<int>()); | |
static_assert(std::is_same<decltype(view.storage_), std::vector<int>>::value, ""); | |
} | |
{ | |
std::vector<int> v; | |
auto view = make_some_range_view(v); | |
static_assert(std::is_same<decltype(view.storage_), std::vector<int>&>::value, ""); | |
} | |
{ | |
const std::vector<int> v; | |
auto view = make_some_range_view(v); | |
static_assert(std::is_same<decltype(view.storage_), const std::vector<int>&>::value, ""); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment