// Copyright(c) 2018, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // VulkanHpp Samples : ArrayProxyNoTemporaries // Compile test on using vk::ArrayProxyNoTemporaries #include "vulkan/vulkan.hpp" #include static char const* AppName = "ArrayProxyNoTemporaries"; static char const* EngineName = "Vulkan.hpp"; void fct(vk::ArrayProxyNoTemporaries /*ap*/) {} void fctc(vk::ArrayProxyNoTemporaries /*ap*/) {} int getInt() { return 1; } std::array getArray() { return { 1, 2 }; } std::array const getConstArray() { return { 1, 2 }; } std::vector getVector() { return { 1, 2 }; } std::vector const getConstVector() { return { 1, 2 }; } std::initializer_list getInitializerList() { return { 1, 2 }; } std::initializer_list const getConstInitializerList() { return { 1, 2 }; } int main( int /*argc*/, char ** /*argv*/ ) { try { // to prevent a warning on unreferenced function vk::getDispatchLoaderStatic, use just one arbitrary vk-function vk::enumerateInstanceVersion(); // nullptr_t fct(nullptr); fctc(nullptr); vk::ArrayProxyNoTemporaries ap0 = nullptr; assert(ap0.size() == 0); // Type //fct(2); // not supported: attempting to reference a deleted function //fctc(1); // not supported: attempting to reference a deleted function // getInt() //fct( getInt() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( T && value ) //fctc( getInt() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( typename std::remove_const::type && value ) int i0 = 1; fct(i0); fctc(i0); const int i1 = 2; //fct(i1); // not supported: cannot convert argument 1 from 'const int' to 'vk::ArrayProxyNoTemporaries' fctc(i1); // count, T * int* i0p = &i0; fct({ 1, i0p }); fctc({ 1, i0p }); // count, T const* int const* i1p = &i1; //fct({ 1, i1p }); // not supported: cannot convert argument 1 from 'initializer list' to 'vk::ArrayProxyNoTemporaries' fctc({ 1, i1p }); // std::array std::array sa0 = { 0, 1 }; fct(sa0); fctc(sa0); // std::array std::array sa1 = { 0, 1 }; //fct(sa1); // not supported: cannot convert argument 1 from 'std::array' to 'vk::ArrayProxyNoTemporaries' fctc(sa1); // std::array const std::array const sa2 = { 1, 2 }; //fct(sa2); // not supported: cannot convert from 'const int *' to 'int *' fctc(sa2); // std::array const std::array const sa3 = { 1, 2 }; //fct(sa3); // not supported: cannot convert argument 1 from 'const std::array' to 'vk::ArrayProxyNoTemporaries' fctc(sa3); // getArray //fct( getConstArray() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::array const && data ) //fctc( getConstArray() ); // // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::array::type> const && data ) //fct( getArray() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::array && data ) //fctc( getArray() ); // // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::array::type, N> && data ) // from std::array constructors vk::ArrayProxyNoTemporaries ap2 = sa0; assert(ap2.size() == 2); //vk::ArrayProxyNoTemporaries ap3 = sa1; // not supported: cannot convert from 'std::array' to 'vk::ArrayProxyNoTemporaries' //vk::ArrayProxyNoTemporaries ap4 = sa2; // not supported: cannot convert from 'int *' to 'int *' //vk::ArrayProxyNoTemporaries ap5 = sa3; // not supported: cannot convert from 'const std::array' to 'vk::ArrayProxyNoTemporaries' vk::ArrayProxyNoTemporaries ap6 = sa0; assert(ap6.size() == 2); vk::ArrayProxyNoTemporaries ap7 = sa1; assert(ap7.size() == 2); vk::ArrayProxyNoTemporaries ap8 = sa2; assert(ap8.size() == 2); vk::ArrayProxyNoTemporaries ap9 = sa3; assert(ap9.size() == 2); // std::vector std::vector sv0 = { 0, 1 }; fct(sv0); fctc(sv0); // std::vector const std::vector const sv1 = { 0, 1 }; //fct(sv1); // not supported: cannot convert from 'const int *' to 'int *' fctc(sv1); vk::ArrayProxyNoTemporaries ap10 = sv0; assert(ap10.size() == 2); //vk::ArrayProxyNoTemporaries ap11 = sv1; // not supported: cannot convert from 'int *' to 'int *' // getVector //fct( getConstVector() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::vector const && data ) //fctc( getConstVector() ); // // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::vector::type, Allocator> const && data ) //fct( getVector() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::vector && data ) //fctc( getVector() ); // // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::vector::type> && data ) vk::ArrayProxyNoTemporaries ap12 = sv0; assert(ap12.size() == 2); vk::ArrayProxyNoTemporaries ap13 = sv1; assert(ap13.size() == 2); // std::initializer_list fct({}); fctc({}); //fct({ 0, 1 }); // not supported: cannot convert argument 1 from 'initializer list' to 'vk::ArrayProxyNoTemporaries' //fctc({ 0, 1 }); // not supported: cannot convert argument 1 from 'initializer list' to 'vk::ArrayProxyNoTemporaries' //int a = 0; //int b = 1; //fct({ a, b }); // not supported: cannot convert argument 1 from 'initializer list' to 'vk::ArrayProxyNoTemporaries' //fctc({ a,b }); // not supported: cannot convert argument 1 from 'initializer list' to 'vk::ArrayProxyNoTemporaries' auto il0 = { 0, 1 }; // -> std::initializer_list //fct(il0); // not supported: cannot convert from 'const int *' to 'int *' fctc(il0); std::initializer_list il1 = { 0, 1 }; //fct(il1); // not supported: cannot convert from 'const int *' to 'int *' fctc(il1); std::initializer_list il2 = { 0, 1 }; //fct(il2); // not supported: cannot convert argument 1 from 'std::initializer_list' to 'vk::ArrayProxyNoTemporaries' fctc(il2); std::initializer_list const il3 = { 0, 1 }; //fct(il3); // not supported: cannot convert from 'const int *' to 'int *' fctc(il3); std::initializer_list const il4 = { 0, 1 }; //fct(il4); // not supported: cannot convert argument 1 from 'const std::initializer_list' to 'vk::ArrayProxyNoTemporaries' fctc(il4); // getInitializerList //fct( getConstInitializerList() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::initializer_list const && list ) //fctc( getConstInitializerList() ); // // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::initializer_list::type> const && list ) //fct( getInitializerList() ); // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::initializer_list && list ) //fctc( getInitializerList() ); // // not supported: attempting to reference a deleted function: ArrayProxyNoTemporaries( std::initializer_list::type> && list ) //vk::ArrayProxyNoTemporaries ap14 = il1; // not supported: cannot convert from 'const int *' to 'int *' //vk::ArrayProxyNoTemporaries ap15 = il2; // not supported: cannot convert from 'std::initializer_list' to 'vk::ArrayProxyNoTemporaries' //vk::ArrayProxyNoTemporaries ap16 = il3; // not supported: cannot convert from 'const int *' to 'int *' //vk::ArrayProxyNoTemporaries ap17 = il4; // not supported: cannot convert from 'const std::initializer_list' to 'vk::ArrayProxyNoTemporaries' vk::ArrayProxyNoTemporaries ap18 = il1; assert(ap18.size() == 2); vk::ArrayProxyNoTemporaries ap19 = il2; assert(ap19.size() == 2); vk::ArrayProxyNoTemporaries ap20 = il3; assert(ap20.size() == 2); vk::ArrayProxyNoTemporaries ap21 = il4; assert(ap21.size() == 2); } catch (vk::SystemError const& err) { std::cout << "vk::SystemError: " << err.what() << std::endl; exit(-1); } catch (...) { std::cout << "unknown error\n"; exit(-1); } return 0; }