View Issue Details

IDProjectCategoryView StatusLast Update
0027111CommunityOCCT:Foundation Classespublic2019-07-10 22:20
ReporterAlexanderZashivalov Assigned Toabv 
PrioritynormalSeverityfeature 
Status closedResolutionfixed 
PlatformWindowsOSVC++ 2010 
Product Version7.0.0 
Target Version7.0.0Fixed in Version7.0.0 
Summary0027111: Add generalized copy constructor in handle class for old compilers
DescriptionThe new handle system introduced the call ambiguity problem for compilers w/o default template parameters supported. The solutions listed here http://dev.opencascade.org/index.php?q=node/1091 require massive code changes. To avoid them the co-called generalized copy constructor could be implemented.
For now it will not solve the call ambiguity problem as there is also the upcast to non-const reference operator, which is required for current OCC code to build. But taking into account this issue http://tracker.dev.opencascade.org/view.php?id=26377 it's supposed to remove this operator.

The proposed ctor is expected to be enabled only for old compilers, allowing to suppress unneeded copy in modern compilers.
Steps To ReproduceN/A
Additional information
and documentation updates
The similar approach is used in std::shared_ptr and boost::shared_ptr to allow construction from smart pointer of convertible type.
TagsNo tags attached.
Test case number

Relationships

related to 0024023 closedabv Open CASCADE Revamp the OCCT Handle 
related to 0026377 closedabv Open CASCADE Passing Handle objects as arguments to functions as non-const reference to base type is dangerous 
related to 0026497 closedbugmaster Community Restore explicit hierarchy of handles 
related to 0027104 closedabv Community DownCast() cannot return null for mismatched handle 
related to 0026549 closedabv Open CASCADE Provide move constructors and operators for basic classes 
related to 0027185 closedbugmaster Open CASCADE Data Exchange - IGES - incorrect reading of DE for undefined entity 

Activities

git

2016-01-25 20:17

administrator   ~0050117

Branch CR27111 has been created by AlexanderZashivalov.

SHA-1: a508895b595a0f87bc4c5b4ae41ae387ed62e6d7


Detailed log of new commits:

Author: Alexander Zashivalov
Date: Mon Jan 25 20:16:58 2016 +0300

    0027111: Add generalized copy constructor in handle class for old compilers

AlexanderZashivalov

2016-01-25 20:21

developer   ~0050118

WARNING: the changes in pushed branch will generate some warnings about returning local variables from functions. They ARE reasonable and will make many tests to throw exceptions. The fix is straightforward and deferred until the resolution from OCC team about whole conception.

Roman Lygin

2016-01-25 20:32

developer   ~0050119

Adding a generalized template constructor will have two major benefits:

1. Easier user code porting to OCC 7.0 for pre-vc12 compilers (where SFINAE used for upcast operator does not work)

2. Better compliance with the std::/boost:: shared_ptr.

abv

2016-01-26 07:54

manager   ~0050121

That is logical, why not. Just two things:

- make sure the code compiles and works fine (by the time I tried this my impression was it would be difficult to get rid of "returning temporaries"; however this might be caused by WOK/CDL issues by the time, or just wrong)

- check that performance impact is not too big

git

2016-01-26 16:22

administrator   ~0050134

Branch CR27111_2 has been created by AlexanderZashivalov.

SHA-1: d016373ded1106212ea880b2bb4cb9719715ee5d


Detailed log of new commits:

Author: Alexander Zashivalov
Date: Mon Jan 25 20:16:58 2016 +0300

    0027111: Add generalized copy constructor in handle class for old compilers

AlexanderZashivalov

2016-01-26 16:26

developer   ~0050135

The new branch is pushed. It compiles w/o errors/warnings. Publicity available tests showed no regressions or performance drops.

abv

2016-01-26 23:29

manager   ~0050140

I believe that line 77 in Standard_Handle.hxx:

#if !TEMPLATE_DEFAULT_ARGS_SUPPORTED

will expand to

#if !(defined(__clang__)) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1300) || \
+ (defined(_MSC_VER) && _MSC_VER >= 1800) || \
+ (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))

and thus it will apply to all compilers except clang, which is clearly incorrect. Why not just replacing cast operators by copy constructors in the same place, without introducing new macro?

git

2016-01-27 12:29

administrator   ~0050157

Branch CR27111_3 has been created by AlexanderZashivalov.

SHA-1: b6a0718436953b500388e976927c71071bd8e07f


Detailed log of new commits:

Author: Alexander Zashivalov
Date: Wed Jan 27 12:14:18 2016 +0300

    0027111: Add generalized copy constructor in handle class for old compilers

AlexanderZashivalov

2016-01-27 12:37

developer   ~0050158

Yes, sorry. I've been using that macro during tests with forced 0 or 1, so didn't catch the error. New branch, containing your suggestion about eliminating the macro, is pushed.

abv

2016-01-29 12:34

manager   ~0050226

Alexander, can you explain why you needed to introduce occ_is_base_of template? Would not it work with using standard tools? If the problem appears while building OCCT (i.e. not in your product), please specify what configuration fails. If the problem occurs on your code, could you provide reproducer? Thank you in advance!

I shall be able to test performance impact of this change during the next week, and then we can agree on how to do.

AlexanderZashivalov

2016-01-29 15:07

developer   ~0050242

Sure. I've been trying to build OCC master branch with visual studio 2010. With generalized ctor enabled many files were not able to compile with the errors like this:
error C2139: 'Units_Quantity' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_base_of'
...
see reference to class template instantiation 'std::tr1::is_base_of<_Base,_Der>' being compiled with
[
_Base=Units_Quantity,
_Der=Units_Quantity
]

This happens because of forward declaration of class Units_Quantity, while is_base_of requires complete types. Including headers with complete types leads to many cyclic dependencies, which is hard to resolve and may require massive code changes. That's why I wrote a simple trait wrapper with specialization for is_same types to be always true.
Another thing to mention. If the above explanation is correct, then why there is no such issue with cast operators? They do use std::is_base_of. This is tied to template instantiation order. When we call handle<MyClass> only __declarations__ of it's methods are actually instantiated, not definitions. For both, modern and old compilers, cast operators have valid deduced declarations, thus their enable_ifs' deducing is deferred until actual call. But this is not true for our ctor as it has non-deduced context (enabler with is_base_of) in signature. In order to acquire a valid declaration the compiler performs this context deducing, which involves instantiating of is_base_of.
Actually we can deffer this instantiation by removing default parameter nullptr. But this will exclude ctor from overload resolution and we will see "no user-defined conversion" errors.
Hope I made things clearer. Would be glad to hear if you have any suggestions about how this whole thing can be implemented.

abv

2016-02-01 07:14

manager   ~0050265

Alexander, thank you for detailed explanation! I recall I encountered this kind of problems while working on handles this year, and your solution seems to be quite good workaround against that.

I have tested your branch and confirm that it builds and does not show any performance degradation. However, I have strong doubt that the change actually resolves an original issue (ambiguity). In my tests, ambiguity is still there when the object being passed is non-const handle -- in that case, cast to non-const reference (subject of 0026377) is used instead of constructor. Actually, all ambiguities I have removed from OCCT seem to be in place -- I see them after reverting corresponding commit.

AlexanderZashivalov

2016-02-01 12:10

developer   ~0050273

Andrey, this solution, unfortunately, is supposed to work only for const references. I.e. to solve ambiguity call problems in situations like:

foo (const Handle_Geom_Curve& theCurve);
foo (const Handle_Geom_Surface& theSurface);
// ...
Handle_Geom_BSplineCurve aCurve;
foo (aCurve);

This doesn't work for non-const references, cuz binding rvalues (temporaries created from copy ctor) is prohibited by the C++ standard (http://stackoverflow.com/questions/13826897/why-not-non-const-reference-to-temporary-objects). Also, as I've mentioned in issue description, there is no room for both, generalized copy ctor and non-const reference cast. Because it's OK for compiler to take non-const cast and add const qualifier. But as I understand, the non-const reference cast is going to be removed. Instead, the SafeUpCast() method will be provided. This is when the copy ctor will work to resolve call ambiguities.
Anyway this is the same behavior as with any other smart pointers. If you really need to pass a non-const reference, then you have to either create lvalue pointer with the exact type, or cast it to the exact type in call context.

As I can see, you've already made a big work to adopt OCC codebase to the new handles system, in particular to resolve call ambiguities. So the proposed copy ctor may not be of a big help here. But it definitely could help OCC users as they will have the same behavior for handle, as for, say, shared_ptr. As an example, we had to change only small amount of our code to successfully build VC10 projects. W/o generalized copy ctor this would take much more effort as we have many calls like in code snippet above.

abv

2016-02-01 13:42

manager   ~0050292

Alexander, I see your arguments; just one remark is that on your example your current fix will still show ambiguity due to non-const reference cast applied to aCurve.

Unfortunately, approach I have tried with SafeUpCast() method does not work, and I see no way to make it working (I can share a branch if you wish to check this). This means that we cannot replace non-const reference cast by some similar but correct code, and the only way to make the code correct is to pass handle of exact type. This requires more changes than just using SafeUpCast() method, and hence I doubt if it is worth making this change in OCCT 7.

AlexanderZashivalov

2016-02-01 15:00

developer   ~0050305

Andrey, yes, I understand that currently non-const upcast operator prevent copy ctor from working. This is because they both are treated as user-defined conversions. Personally I've just commented it out during builds. I was hoping that SafeUpCast() should work as expected, sadly to hear that it doesn't.
Well then, the proposed code integration seems to be useless for now and should be deferred until non-const cast operator removed. We will think about another alternatives and let you know about new findings.

git

2016-02-12 09:02

administrator   ~0050662

Last edited: 2016-02-12 09:04

Branch CR27111_4 has been created by abv.

SHA-1: 13ebbfbf211c3379529f8165a17c8bc217245663


Detailed log of new commits:

Author: abv
Date: Mon Jan 25 10:14:20 2016 +0300

    0027104: DownCast() cannot return null for mismatched handle
    
    Method DownCast() is amended to be available only when argument is actually a pointer or handle to a base class.
    When DownCast() is used for the same type, derived, or unrelated class (i.e. where there is no actual down casting), compiler error will be generated.
    
    OCCT code is updated to remove such trivial DownCast()s; a few places where DownCast() was used with argument of unrelated type are corrected.
    
    DRAW command QAHandleCast is removed (it was useful only during redesign of handles).

Author: abv
Date: Tue Aug 11 23:01:05 2015 +0300

    0026549: Provide move constructors and operators for basic classes
    
    Move constructor and operator added for opencascade::handle<>

Author: abv
Date: Sat Feb 6 15:26:26 2016 +0300

    0027111: Add generalized copy constructor in handle class for old compilers
    
    Copy constructor and assignment operator from handle of derived type is added in handle class.
    They are enabled only if macro OCC_HANDLE_NOCASTS is defined, and operators of cast of handle to reference to handle to base type are disabled in that case.
    
    Useless type casts to handle to base type are removed in GC and GCE2d classes.
    Code returning reference to handle from function is corrected to return it either by value or as reference to handle of actual type.

Author: abv
Date: Thu Feb 4 07:12:03 2016 +0300

    0026377: Passing Handle objects as arguments to functions as non-const reference to base type is dangerous
    
    Operator of cast to non-const reference is declared deprecated to produce compiler warning if used (usually implicitly).
    
    OCCT code is updated to avoid that cast, occurring when function accepting non-const reference to handle is called with handle to derived type. For that, local variable of argument type is passed instead, and down-cast is used to get it to desired type after the call.

Author: kgv
Date: Sat Jan 30 15:51:35 2016 +0300

    0027118: Configuration - do not suppress deprecation warnings when using msvc
    
    Patch removes option -wd4996 from VS project settings (which suppresses old deprecation warnings).
    Instead, macros _CRT_SECURE_NO_WARNINGS (suppresses 444 warnings) and _CRT_NONSTDC_NO_DEPRECATE (suppresses 17 warnings) have been added.
    
    Deprecation warning on GetVersionEx() has been suppressed locally in OSD_Host.cxx.
    In STEPConstruct_AP203Context.cxx, OSD_Host is used instead of low-level system functions.
    This eliminates dependency of TKSTEP on winsock32.lib on Windows.

Author: kgv
Date: Sat Jan 30 14:54:12 2016 +0300

    0027113: Coding - add macros Standard_DEPRECATED for marking deprecated functionality

abv

2016-02-12 09:15

manager   ~0050664

I have been able to build a version comprising several pending fixes on Hendles which finally seems to me consistent, see branch CR27111_4.

The default behavior did not change (except that non-const cast of handle should generate deprecation warning on VC10-11, and that DownCast() is not available for unrelated types). However, compiler-time macro OCCT_HANDLE_NOCAST can be used to trigger the implementation from casts to constructors. This should allow getting rid of ambiguity problem and other troubles caused by cast operators (see Upgrade guide), but the code must be modified to avoid use of non-const casts.

Please review.

git

2016-02-13 18:11

administrator   ~0050720

Branch CR27111_5 has been created by abv.

SHA-1: 05fcc170e2fe2a947d5ec76115a61b42e4acf488


Detailed log of new commits:

Author: abv
Date: Mon Jan 25 10:14:20 2016 +0300

    0027104: DownCast() cannot return null for mismatched handle
    
    Method DownCast() is amended to be available only when argument is actually a pointer or handle to a base class.
    When DownCast() is used for the same type, derived, or unrelated class (i.e. where there is no actual down casting), compiler error will be generated.
    
    OCCT code is updated to remove such trivial DownCast()s; a few places where DownCast() was used with argument of unrelated type are corrected.
    
    DRAW command QAHandleCast is removed (it was useful only during redesign of handles).

Author: abv
Date: Tue Aug 11 23:01:05 2015 +0300

    0026549: Provide move constructors and operators for basic classes
    
    Move constructor and operator added for opencascade::handle<>

Author: abv
Date: Sat Feb 6 15:26:26 2016 +0300

    0027111: Add generalized copy constructor in handle class for old compilers
    
    Copy constructor and assignment operator from handle of derived type is added in handle class.
    They are enabled only if macro OCC_HANDLE_NOCASTS is defined, and operators of cast of handle to reference to handle to base type are disabled in that case.
    
    Useless type casts to handle to base type are removed in GC and GCE2d classes.
    Code returning reference to handle from function is corrected to return it either by value or as reference to handle of actual type.

Author: abv
Date: Thu Feb 4 07:12:03 2016 +0300

    0026377: Passing Handle objects as arguments to functions as non-const reference to base type is dangerous
    
    Operator of cast to non-const reference is declared deprecated to produce compiler warning if used (usually implicitly).
    
    OCCT code is updated to avoid that cast, occurring when function accepting non-const reference to handle is called with handle to derived type. For that, local variable of argument type is passed instead, and down-cast is used to get it to desired type after the call.

git

2016-02-14 15:02

administrator   ~0050726

Branch CR27111_5_DEF has been created by inv.

SHA-1: f23e7a778d3f53f4ab1a51c0010006b9eb2a2725


Detailed log of new commits:

Author: bugmaster
Date: Sun Feb 14 15:01:50 2016 +0300

    Adding macros OCCT_HANDLE_NOCAST

git

2016-02-15 14:49

administrator   ~0050754

Branch CR27111_6 has been created by abv.

SHA-1: f342c6e095d481f044817c8cce186d7760d84627


Detailed log of new commits:

Author: abv
Date: Mon Jan 25 10:14:20 2016 +0300

    0027104: DownCast() cannot return null for mismatched handle
    
    Method DownCast() is made template, to be available only when argument is actually a pointer or handle to a base class.
    
    For compatibility with existing code, method DownCast() that can be used for the same type, derived, or unrelated class (i.e. where there is no actual down casting) is still available, its use shall cause "deprecated" compiler warning.
    
    OCCT code is updated to remove meaningless DownCast()s; a few places where DownCast() was used with argument of unrelated type are corrected.
    
    DRAW command QAHandleCast is removed (it was useful only during redesign of handles).

Author: abv
Date: Tue Aug 11 23:01:05 2015 +0300

    0026549: Provide move constructors and operators for basic classes
    
    Move constructor and operator added for opencascade::handle<>

Author: abv
Date: Sat Feb 6 15:26:26 2016 +0300

    0027111: Add generalized copy constructor in handle class for old compilers
    
    Copy constructor and assignment operator from handle of derived type is added in handle class.
    They are enabled only if macro OCC_HANDLE_NOCASTS is defined, and operators of cast of handle to reference to handle to base type are disabled in that case.
    
    Useless type casts to handle to base type are removed in GC and GCE2d classes.
    Code returning reference to handle from function is corrected to return it either by value or as reference to handle of actual type.

Author: abv
Date: Thu Feb 4 07:12:03 2016 +0300

    0026377: Passing Handle objects as arguments to functions as non-const reference to base type is dangerous
    
    Operator of cast to non-const reference is declared deprecated to produce compiler warning if used (usually implicitly).
    
    OCCT code is updated to avoid that cast, occurring when function accepting non-const reference to handle is called with handle to derived type. For that, local variable of argument type is passed instead, and down-cast is used to get it to desired type after the call.

git

2016-02-15 18:24

administrator   ~0050776

Branch CR27111_6 has been updated forcibly by abv.

SHA-1: 3f2fd593ba5fa4d47d904b9c5e274026ece5a7cf

kgv

2016-02-15 19:15

developer   ~0050779

No remarks.

git

2016-02-17 16:08

administrator   ~0050889

Branch CR27111_6 has been updated by abv.

SHA-1: f6ddccd5228143b92669f740070ceeaa748d889f


Detailed log of new commits:

Author: abv
Date: Wed Feb 17 16:08:01 2016 +0300

    fix regressions

git

2016-02-17 17:02

administrator   ~0050895

Branch CR27111_6 has been updated forcibly by abv.

SHA-1: 7f0437b6ef289a5365c88066fe7100e2ca35e958

git

2016-02-17 17:36

administrator   ~0050900

Branch CR27111_6 has been updated forcibly by abv.

SHA-1: 7267e057ee5e392f5583fdf40fda807a52199337

git

2016-02-19 06:48

administrator   ~0050987

Branch CR27111_6 has been updated forcibly by abv.

SHA-1: 69878aab402ec186a94a23b1364431ff792fe3eb

bugmaster

2016-02-19 10:33

administrator   ~0050988

Branch CR27111_6 includes fixes for 26549,27104,26337,27118 and 27113

git

2016-04-17 14:48

administrator   ~0053235

Branch CR27111 has been deleted by kgv.

SHA-1: a508895b595a0f87bc4c5b4ae41ae387ed62e6d7

git

2016-04-17 14:48

administrator   ~0053236

Branch CR27111_2 has been deleted by kgv.

SHA-1: d016373ded1106212ea880b2bb4cb9719715ee5d

git

2016-04-17 14:48

administrator   ~0053237

Branch CR27111_3 has been deleted by kgv.

SHA-1: b6a0718436953b500388e976927c71071bd8e07f

git

2016-04-17 14:48

administrator   ~0053238

Branch CR27111_4 has been deleted by kgv.

SHA-1: 13ebbfbf211c3379529f8165a17c8bc217245663

git

2016-04-17 14:48

administrator   ~0053239

Branch CR27111_5 has been deleted by kgv.

SHA-1: 05fcc170e2fe2a947d5ec76115a61b42e4acf488

git

2016-04-17 14:48

administrator   ~0053240

Branch CR27111_5_DEF has been deleted by kgv.

SHA-1: f23e7a778d3f53f4ab1a51c0010006b9eb2a2725

git

2016-04-17 14:48

administrator   ~0053241

Branch CR27111_6 has been deleted by kgv.

SHA-1: 69878aab402ec186a94a23b1364431ff792fe3eb

Related Changesets

occt: master 4796758e

2016-02-06 12:26:26

abv


Committer: abv Details Diff
0027111: Add generalized copy constructor in handle class for old compilers

Copy constructor and assignment operator from handle of derived type is added in handle class.
They are enabled only if macro OCC_HANDLE_NOCASTS is defined, and operators of cast of handle to reference to handle to base type are disabled in that case.

Useless type casts to handle to base type are removed in GC and GCE2d classes.
Code returning reference to handle from function is corrected to return it either by value or as reference to handle of actual type.
Affected Issues
0027111
mod - dox/dev_guides/upgrade/upgrade.md Diff File
mod - src/AIS/AIS_LocalContext_1.cxx Diff File
mod - src/BinDrivers/BinDrivers.cxx Diff File
mod - src/BinLDrivers/BinLDrivers.cxx Diff File
mod - src/BinTObjDrivers/BinTObjDrivers.cxx Diff File
mod - src/BinXCAFDrivers/BinXCAFDrivers.cxx Diff File
mod - src/FWOSDriver/FWOSDriver.cxx Diff File
mod - src/GC/GC_MakeArcOfCircle.hxx Diff File
mod - src/GC/GC_MakeArcOfEllipse.hxx Diff File
mod - src/GC/GC_MakeArcOfHyperbola.hxx Diff File
mod - src/GC/GC_MakeArcOfParabola.hxx Diff File
mod - src/GC/GC_MakeCircle.hxx Diff File
mod - src/GC/GC_MakeConicalSurface.hxx Diff File
mod - src/GC/GC_MakeCylindricalSurface.hxx Diff File
mod - src/GC/GC_MakeEllipse.hxx Diff File
mod - src/GC/GC_MakeHyperbola.hxx Diff File
mod - src/GC/GC_MakeLine.hxx Diff File
mod - src/GC/GC_MakePlane.hxx Diff File
mod - src/GC/GC_MakeSegment.hxx Diff File
mod - src/GC/GC_MakeTrimmedCone.hxx Diff File
mod - src/GC/GC_MakeTrimmedCylinder.hxx Diff File
mod - src/GCE2d/GCE2d_MakeArcOfCircle.hxx Diff File
mod - src/GCE2d/GCE2d_MakeArcOfEllipse.hxx Diff File
mod - src/GCE2d/GCE2d_MakeArcOfHyperbola.hxx Diff File
mod - src/GCE2d/GCE2d_MakeArcOfParabola.hxx Diff File
mod - src/GCE2d/GCE2d_MakeCircle.hxx Diff File
mod - src/GCE2d/GCE2d_MakeEllipse.hxx Diff File
mod - src/GCE2d/GCE2d_MakeHyperbola.hxx Diff File
mod - src/GCE2d/GCE2d_MakeLine.hxx Diff File
mod - src/GCE2d/GCE2d_MakeParabola.hxx Diff File
mod - src/GCE2d/GCE2d_MakeSegment.hxx Diff File
mod - src/OpenGl/OpenGl_Context.cxx Diff File
mod - src/PrsMgr/PrsMgr_Presentation.cxx Diff File
mod - src/PrsMgr/PrsMgr_Presentation.hxx Diff File
mod - src/Standard/Standard_Handle.hxx Diff File
mod - src/TopOpeBRepBuild/TopOpeBRepBuild_LoopSet.cxx Diff File
mod - src/TopOpeBRepBuild/TopOpeBRepBuild_LoopSet.hxx Diff File
mod - src/TopOpeBRepBuild/TopOpeBRepBuild_PaveSet.cxx Diff File
mod - src/TopOpeBRepBuild/TopOpeBRepBuild_PaveSet.hxx Diff File
mod - src/XmlDrivers/XmlDrivers.cxx Diff File
mod - src/XmlLDrivers/XmlLDrivers.cxx Diff File
mod - src/XmlTObjDrivers/XmlTObjDrivers.cxx Diff File
mod - src/XmlXCAFDrivers/XmlXCAFDrivers.cxx Diff File
mod - src/XSControl/XSControl_Controller.cxx Diff File

Issue History

Date Modified Username Field Change
2016-01-25 20:15 AlexanderZashivalov New Issue
2016-01-25 20:15 AlexanderZashivalov Assigned To => abv
2016-01-25 20:17 git Note Added: 0050117
2016-01-25 20:21 AlexanderZashivalov Note Added: 0050118
2016-01-25 20:28 AlexanderZashivalov Relationship added related to 0026497
2016-01-25 20:32 Roman Lygin Note Added: 0050119
2016-01-25 20:35 Roman Lygin Relationship added related to 0024023
2016-01-25 20:36 Roman Lygin Relationship added related to 0026377
2016-01-26 07:54 abv Note Added: 0050121
2016-01-26 16:22 git Note Added: 0050134
2016-01-26 16:26 AlexanderZashivalov Note Added: 0050135
2016-01-26 23:29 abv Note Added: 0050140
2016-01-27 12:29 git Note Added: 0050157
2016-01-27 12:37 AlexanderZashivalov Note Added: 0050158
2016-01-29 12:34 abv Note Added: 0050226
2016-01-29 15:07 AlexanderZashivalov Note Added: 0050242
2016-02-01 07:14 abv Note Added: 0050265
2016-02-01 12:10 AlexanderZashivalov Note Added: 0050273
2016-02-01 13:42 abv Note Added: 0050292
2016-02-01 15:00 AlexanderZashivalov Note Added: 0050305
2016-02-12 09:02 git Note Added: 0050662
2016-02-12 09:04 abv Note Edited: 0050662
2016-02-12 09:15 abv Note Added: 0050664
2016-02-12 09:15 abv Assigned To abv => kgv
2016-02-12 09:15 abv Status new => resolved
2016-02-12 09:15 abv Steps to Reproduce Updated
2016-02-13 18:11 git Note Added: 0050720
2016-02-14 15:02 git Note Added: 0050726
2016-02-15 14:49 git Note Added: 0050754
2016-02-15 18:24 git Note Added: 0050776
2016-02-15 19:15 kgv Note Added: 0050779
2016-02-15 19:15 kgv Assigned To kgv => bugmaster
2016-02-15 19:15 kgv Status resolved => reviewed
2016-02-16 11:41 kgv Relationship added related to 0027104
2016-02-16 11:41 kgv Relationship added related to 0026549
2016-02-16 12:09 mkv Assigned To bugmaster => mkv
2016-02-16 12:18 mkv Assigned To mkv => bugmaster
2016-02-17 16:08 git Note Added: 0050889
2016-02-17 17:02 git Note Added: 0050895
2016-02-17 17:36 git Note Added: 0050900
2016-02-18 18:59 abv Relationship added related to 0027185
2016-02-18 18:59 abv Relationship deleted related to 0027185
2016-02-19 06:48 git Note Added: 0050987
2016-02-19 10:30 bugmaster Status reviewed => tested
2016-02-19 10:33 bugmaster Note Added: 0050988
2016-02-21 08:52 abv Changeset attached => occt master 4796758e
2016-02-21 08:52 abv Assigned To bugmaster => abv
2016-02-21 08:52 abv Status tested => verified
2016-02-21 08:52 abv Resolution open => fixed
2016-04-17 14:48 git Note Added: 0053235
2016-04-17 14:48 git Note Added: 0053236
2016-04-17 14:48 git Note Added: 0053237
2016-04-17 14:48 git Note Added: 0053238
2016-04-17 14:48 git Note Added: 0053239
2016-04-17 14:48 git Note Added: 0053240
2016-04-17 14:48 git Note Added: 0053241
2016-04-20 15:42 aiv Fixed in Version => 7.0.0
2016-04-20 15:51 aiv Status verified => closed
2019-07-10 22:20 abv Relationship added related to 0027185