Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- extern const char HELLO[] = "Hello World!!!";
- template<const char _S[]>
- constexpr size_t len1() { return sizeof(_S); }
- template<const char _S[]>
- constexpr size_t len2() { return std::strlen(_S); }
- template<const char _S[], std::size_t _Sz=sizeof(_S)>
- constexpr size_t len3() { return _Sz-1; }
- template<unsigned int _N>
- constexpr size_t len5(const char(&str)[_N])
- {
- return _N-1;
- }
- int main() {
- enum {
- l1 = len1<HELLO>(),
- // l2 = len2<HELLO>() does not compile
- l3 = len3<HELLO>(),
- l4 = len3<HELLO, sizeof(HELLO)>(),
- l5 = len5(HELLO),
- };
- std::cout << l1 << std::endl; // outputs 4
- // std::cout << l2 << std::endl;
- std::cout << l3 << std::endl; // outputs 3
- std::cout << l4 << std::endl; // outputs 14
- std::cout << l5 << std::endl; // outputs 14
- return 0;
- }
- template<const char _S[unsigned int _N]>
- constexpr size_t len6() { return _N-1; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement