June 16, 2008 [STLSoft-1.9.44] allocator problem with class clipboard_scope under VC8 | ||||
---|---|---|---|---|
| ||||
Hi Matthew, Compiling the program below with Visual C++ 8 gives an error. In function set_data_or_deallocate_and_throw_ HANDLE (being deallocated) is incompatible with the allocator's char* type. Changing lines 269-271 from: 269 private: 270 template <ss_typename_param_k A> 271 void set_data_or_deallocate_and_throw_(UINT fmt, HANDLE hData, A& ator) stlsoft_throw_1(clipboard_scope_exception) to 269 private: 270 template <ss_typename_param_k C, ss_typename_param_k A> 271 void set_data_or_deallocate_and_throw_(UINT fmt, C* hData, A& ator) stlsoft_throw_1(clipboard_scope_exception) seems to solve the issue. Cheers, Martin. ___ #include <winstl/clipboard/clipboard_scope.hpp> #include <algorithm> // std::copy #include <iostream> // std::cout, std::endl int main() { try { // set the data on the clipboard: { winstl::clipboard_scope scope; scope.set_data( "Text from clipboard_scope demo." ); } // as long as no other thread/process changes the clipboard contents // in the meanwhile, this can then be read back, as follows: { winstl::clipboard_scope scope; char const *cstr; scope.get_data( cstr ); std::cout << "Clipboard data: " << cstr << std::endl; // scope.get_allocator().do_deallocate( cstr ); // private! } } catch( std::exception const& e ) { std::cerr << "Exception: " << e.what() << std::endl; } } ___ cl -nologo -W3 -EHsc -I"D:\Libraries\stlsoft-1.9.44/include" -D"WINVER=0x0400" -D"_CRT_SECURE_NO_DEPRECATE" -D"_SCL_SECURE_NO_DEPRECATE" user32.lib Psapi.lib wininet.lib ws2_32.lib winstl_clipboard_scope.cpp winstl_clipboard_scope.cpp D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(284) : error C2664: 'void stlsoft::allocator_base<T,A>::deallocate(char *)' : cannot convert parameter 1 from 'HANDLE' to 'char *' with [ T=char, A=stlsoft::winstl_project::global_allocator<char> ] Conversion from 'void*' to pointer to non-'void' requires an explicit cast D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(382) : see reference to function template instantiation 'void stlsoft::winstl_project::clipboard_scope::set_data_or_deallocate_and_throw_<stlsoft::winstl_project::global_allocator<T>>(UINT,HANDLE,A &) throw(stlsoft::winstl_project::clipboard_scope_exception)' being compiled with [ T=char, A=stlsoft::winstl_project::global_allocator<char> ] D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(284) : error C2664: 'void stlsoft::allocator_base<T,A>::deallocate(wchar_t *)' : cannot convert parameter 1 from 'HANDLE' to 'wchar_t *' with [ T=wchar_t, A=stlsoft::winstl_project::global_allocator<wchar_t> ] Conversion from 'void*' to pointer to non-'void' requires an explicit cast D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(406) : see reference to function template instantiation 'void stlsoft::winstl_project::clipboard_scope::set_data_or_deallocate_and_throw_<stlsoft::winstl_project::global_allocator<T>>(UINT,HANDLE,A &) throw(stlsoft::winstl_project::clipboard_scope_exception)' being compiled with [ T=wchar_t, A=stlsoft::winstl_project::global_allocator<wchar_t> ] ___ File winstl/clipboard/clipboard_scope.hpp private: template <ss_typename_param_k A> void set_data_or_deallocate_and_throw_(UINT fmt, HANDLE hData, A& ator) stlsoft_throw_1(clipboard_scope_exception) { #ifdef STLSOFT_CF_EXCEPTION_SUPPORT try { #endif /* STLSOFT_CF_EXCEPTION_SUPPORT */ set_data(fmt, hData); #ifdef STLSOFT_CF_EXCEPTION_SUPPORT } catch(...) { LINE 284 ator.deallocate(hData); <========= LINE 284 throw; } #endif /* STLSOFT_CF_EXCEPTION_SUPPORT */ } ___ |
August 12, 2008 Re: [STLSoft-1.9.44] allocator problem with class clipboard_scope under | ||||
---|---|---|---|---|
| ||||
Posted in reply to Martin Moene | Hi Martin
Thanks for this. It'll be incorporated into the next release.
Martin Moene Wrote:
> Hi Matthew,
>
> Compiling the program below with Visual C++ 8 gives an error.
>
> In function set_data_or_deallocate_and_throw_ HANDLE (being deallocated) is incompatible with the allocator's char* type.
>
> Changing lines 269-271 from:
>
> 269 private:
> 270 template <ss_typename_param_k A>
> 271 void set_data_or_deallocate_and_throw_(UINT fmt, HANDLE hData, A&
> ator) stlsoft_throw_1(clipboard_scope_exception)
>
> to
>
> 269 private:
> 270 template <ss_typename_param_k C, ss_typename_param_k A>
> 271 void set_data_or_deallocate_and_throw_(UINT fmt, C* hData, A& ator)
> stlsoft_throw_1(clipboard_scope_exception)
>
> seems to solve the issue.
>
> Cheers, Martin.
> ___
>
> #include <winstl/clipboard/clipboard_scope.hpp>
>
> #include <algorithm> // std::copy
> #include <iostream> // std::cout, std::endl
>
> int main()
> {
> try
> {
> // set the data on the clipboard:
> {
> winstl::clipboard_scope scope;
>
> scope.set_data( "Text from clipboard_scope demo." );
> }
>
> // as long as no other thread/process changes the clipboard contents
> // in the meanwhile, this can then be read back, as follows:
> {
> winstl::clipboard_scope scope;
> char const *cstr;
>
> scope.get_data( cstr );
>
> std::cout << "Clipboard data: " << cstr << std::endl;
>
> // scope.get_allocator().do_deallocate( cstr ); // private!
> }
> }
> catch( std::exception const& e )
> {
> std::cerr << "Exception: " << e.what() << std::endl;
> }
> }
> ___
>
> cl -nologo -W3 -EHsc -I"D:\Libraries\stlsoft-1.9.44/include"
> -D"WINVER=0x0400" -D"_CRT_SECURE_NO_DEPRECATE" -D"_SCL_SECURE_NO_DEPRECATE"
> user32.lib Psapi.lib wininet.lib ws2_32.lib winstl_clipboard_scope.cpp
> winstl_clipboard_scope.cpp
> D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(284)
> : error C2664: 'void stlsoft::allocator_base<T,A>::deallocate(char *)' :
> cannot convert parameter 1 from 'HANDLE' to 'char *'
> with
> [
> T=char,
> A=stlsoft::winstl_project::global_allocator<char>
> ]
> Conversion from 'void*' to pointer to non-'void' requires an
> explicit cast
>
> D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(382)
> : see reference to function template instantiation 'void
> stlsoft::winstl_project::clipboard_scope::set_data_or_deallocate_and_throw_<stlsoft::winstl_project::global_allocator<T>>(UINT,HANDLE,A
> &) throw(stlsoft::winstl_project::clipboard_scope_exception)' being compiled
> with
> [
> T=char,
> A=stlsoft::winstl_project::global_allocator<char>
> ]
> D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(284)
> : error C2664: 'void stlsoft::allocator_base<T,A>::deallocate(wchar_t *)' :
> cannot convert parameter 1 from 'HANDLE' to 'wchar_t *'
> with
> [
> T=wchar_t,
> A=stlsoft::winstl_project::global_allocator<wchar_t>
> ]
> Conversion from 'void*' to pointer to non-'void' requires an
> explicit cast
>
> D:\Libraries\stlsoft-1.9.44/include\winstl/clipboard/clipboard_scope.hpp(406)
> : see reference to function template instantiation 'void
> stlsoft::winstl_project::clipboard_scope::set_data_or_deallocate_and_throw_<stlsoft::winstl_project::global_allocator<T>>(UINT,HANDLE,A
> &) throw(stlsoft::winstl_project::clipboard_scope_exception)' being compiled
> with
> [
> T=wchar_t,
> A=stlsoft::winstl_project::global_allocator<wchar_t>
> ]
> ___
>
> File winstl/clipboard/clipboard_scope.hpp
>
> private:
> template <ss_typename_param_k A>
> void set_data_or_deallocate_and_throw_(UINT fmt, HANDLE hData, A& ator)
> stlsoft_throw_1(clipboard_scope_exception)
> {
> #ifdef STLSOFT_CF_EXCEPTION_SUPPORT
> try
> {
> #endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
>
> set_data(fmt, hData);
>
> #ifdef STLSOFT_CF_EXCEPTION_SUPPORT
> }
> catch(...)
> {
> LINE 284 ator.deallocate(hData); <========= LINE 284
>
> throw;
> }
> #endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
> }
>
> ___
|
Copyright © 1999-2021 by the D Language Foundation