Commit graph

138 commits

Author SHA1 Message Date
Kp f92e890f50 Improve valptridx exception reporting 2015-05-09 17:39:02 +00:00
Kp ae8ee3651a Enable vcvalptr(P*) 2015-05-09 17:38:58 +00:00
Kp 534fe7a160 Refactor valptr range checks 2015-04-18 01:21:54 +00:00
Kp f17458d353 Explicitly delete valptridx inequality operators 2015-02-14 22:48:30 +00:00
Kp 81d763476e Raise index_range_exception on bad index to valptridx 2015-01-17 04:31:17 +00:00
Kp 3f84b8e165 Move valptridx checks inline 2014-12-20 04:36:10 +00:00
Kp 3423d94729 Disallow converting valptridx to void* 2014-12-14 05:23:00 +00:00
Kp 8b3d9b9d31 Bypass NULL check copying valptr_t 2014-12-02 04:36:19 +00:00
Kp 690dec3342 Workaround compilers mishandling template-template arguments
Visual Studio 2013 Update 4 and Clang 3.4 fail to parse
valptridx_template_t related argument lists because they misinterpret
the unspecialized inner template name as a reference to the current
specialization.  This seems to be nonconforming in C++11.

All gcc versions supported by Rebirth parse this sample program
correctly, but neither Visual Studio nor clang accept it.

    template <template <typename> class>
    struct A
    {
    };

    template <typename>
    struct B
    {
	    B(A<B>);
    };

In <https://stackoverflow.com/questions/17687459/clang-not-accepting-use-of-template-template-parameter-when-using-crtp>, a user saw a similar failure and received the answer:
    Your code is legal.

    From the C++11 Standard, section 14.6.1:

	Like normal (non-template) classes, class templates have an injected-class-name (Clause 9). The injected-class-name can be used as a template-name or a type-name. When it is used with a template-argument-list, as a template-argument for a template template-parameter, or as the final identifier in the elaborated-type- specifier of a friend class template declaration, it refers to the class template itself.

    Looks like your version of clang is still implementing the old rule.

This failure was first seen with Visual Studio 2013, but ignored because
Visual Studio has so many other problems parsing Rebirth.  Now that it
has been reported to affect clang as well, a workaround is clearly
needed.  A fix was suggested by btb
<2f9543f981>,
but that fix breaks gcc.

Rewrite the valptridx_template_t parameter passing to avoid mentioning
unspecialized template names as template parameters while defining the
class used as the parameter.

Reported by btb (clang): https://github.com/dxx-rebirth/dxx-rebirth/pull/12
2014-11-30 23:44:52 +00:00
Kp 5f38c85e02 Improve compiler error messages on failed const T* -> T* conversions 2014-11-27 03:25:21 +00:00
Kp 327fe23586 Fix -Wnarrowing in valptridx operator- 2014-11-26 03:00:58 +00:00
Kp 388dfb98a0 Move valptridx helpers out of macro 2014-11-25 04:02:01 +00:00
Kp d0090225b3 Fix segment_first/object_first mismatch 2014-11-23 21:41:30 +00:00
Kp d63be88eb0 Propagate use of vsegptridx_t 2014-11-23 04:58:45 +00:00
Kp 53aa70cecb Use vsegptridx_t 2014-10-28 03:08:51 +00:00
Kp 039bf2f0b7 Fix crash on failure to create afterburner blob
Fix crash on failure to recreate thief.
2014-09-13 22:01:17 +00:00
Kp 41bb341777 Split valptridx_t into pieces 2014-09-12 03:22:34 +00:00
Kp b95759aecc Propagate use of objptridx 2014-08-23 23:53:56 +00:00
Kp f5a85b0f65 Enable converting vvalptridx->valptridx for subtypes 2014-08-17 22:09:32 +00:00
Kp 3ea6b0eb18 Explicitly delete nullptr construction of valptridx 2014-08-17 20:41:59 +00:00
Kp 66cb80c343 Propagate use of objptridx 2014-08-17 20:31:18 +00:00
Kp 56557a0443 Explicitly delete vvalptridx(valptridx&&) 2014-08-17 19:32:16 +00:00
Kp 55063abade Use static_assert to reject invalid vvalptridx_t constants 2014-08-13 22:10:20 +00:00
Kp 915b78b5e1 Add vvalptridx_t for always-valid valptridx values 2014-08-13 03:19:12 +00:00
Kp 903258f54b Make valptridx constructors ready for constexpr
Wait on constexpr marking since array in <gcc-4.8 is not constexpr.
2014-08-09 17:38:45 +00:00
Kp d667772b21 Move valptridx operator- into DEFINE_VALPTRIDX_SUBTYPE 2014-08-02 00:46:56 +00:00
Kp 9c6cc3b3c9 Allow constructing valptridx_t(index_type) from ~0 2014-08-01 03:34:08 +00:00
Kp 0fc376d92a Simplify DXX_VALPTRIDX_STATIC_CHECK 2014-08-01 03:34:08 +00:00
Kp 082bb43ede Fold valptridx_t features into template 2014-07-13 03:43:32 +00:00
Kp 229dbe1b47 Add runtime exception reporting to valptridx 2014-07-05 22:00:08 +00:00
zico ad7cb106bc Changed custom D1X license to GPLv3 2014-06-01 19:55:23 +02:00
Kp a2427f58b5 Use special type to reduce pointer/index conversions 2014-01-12 19:32:12 +00:00
Kp d246005c7e Move object_create_explosion_sub pointer into loop 2014-01-12 00:33:08 +00:00
Kp aac0ab26d7 Refactor _DEFINE_VALPTRIDX_SUBTYPE_USERTYPES 2014-01-11 18:20:33 +00:00
Kp 07a23cbaf2 Detect always-invalid valptridx indexes 2014-01-10 03:58:03 +00:00
Kp f1a6757693 Use objptridx_t for obj_create 2014-01-10 03:20:11 +00:00
Kp a748065fe5 Explicitly delete valptridx subtype default constructors 2014-01-06 04:17:57 +00:00
Kp 8218af34b5 Add special type to let obj_*link take either pointer or index 2014-01-03 04:04:04 +00:00