@@ -15,7 +15,7 @@ namespace impl
1515template<typename T, typename U>
1616struct Promote
1717{
18- NBL_CONSTEXPR_FUNC T operator ()(const U v)
18+ NBL_CONSTEXPR_FUNC T operator ()(NBL_CONST_REF_ARG (U) v)
1919 {
2020 return T (v);
2121 }
@@ -26,7 +26,7 @@ struct Promote
2626template<typename Scalar, typename U>
2727struct Promote<vector <Scalar, 1 >, U>
2828{
29- NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 1 > > operator ()(NBL_CONST_REF_ARG (U) v)
29+ NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 1 > > operator ()(const U v)
3030 {
3131 vector <Scalar, 1 > promoted = {Scalar (v)};
3232 return promoted;
@@ -36,7 +36,7 @@ struct Promote<vector <Scalar, 1>, U>
3636template<typename Scalar, typename U>
3737struct Promote<vector <Scalar, 2 >, U>
3838{
39- NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 2 > > operator ()(NBL_CONST_REF_ARG (U) v)
39+ NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 2 > > operator ()(const U v)
4040 {
4141 vector <Scalar, 2 > promoted = {Scalar (v), Scalar (v)};
4242 return promoted;
@@ -46,7 +46,7 @@ struct Promote<vector <Scalar, 2>, U>
4646template<typename Scalar, typename U>
4747struct Promote<vector <Scalar, 3 >, U>
4848{
49- NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 3 > > operator ()(NBL_CONST_REF_ARG (U) v)
49+ NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 3 > > operator ()(const U v)
5050 {
5151 vector <Scalar, 3 > promoted = {Scalar (v), Scalar (v), Scalar (v)};
5252 return promoted;
@@ -56,7 +56,7 @@ struct Promote<vector <Scalar, 3>, U>
5656template<typename Scalar, typename U>
5757struct Promote<vector <Scalar, 4 >, U>
5858{
59- NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 4 > > operator ()(NBL_CONST_REF_ARG (U) v)
59+ NBL_CONSTEXPR_FUNC enable_if_t<is_scalar<Scalar>::value && is_scalar<U>::value, vector <Scalar, 4 > > operator ()(const U v)
6060 {
6161 vector <Scalar, 4 > promoted = {Scalar (v), Scalar (v), Scalar (v), Scalar (v)};
6262 return promoted;
@@ -67,13 +67,15 @@ struct Promote<vector <Scalar, 4>, U>
6767
6868}
6969
70+ // TODO(kevinyu): Should we specialize this for vector and scalar to take argument by value instead of reference?
7071template<typename T, typename U>
71- NBL_CONSTEXPR_FUNC T promote (const U v) // TODO: use NBL_CONST_REF_ARG(U) instead of U v (circular ref )
72+ NBL_CONSTEXPR_FUNC T promote (NBL_CONST_REF_ARG (U) v )
7273{
7374 impl::Promote<T,U> _promote;
7475 return _promote (v);
7576}
7677
78+
7779}
7880}
7981
0 commit comments