View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update | 
|---|---|---|---|---|---|
| 0005750 | ardour | bugs | public | 2013-10-26 13:19 | 2013-10-26 14:05 | 
| Reporter | nolaiz | Assigned To | |||
| Priority | normal | Severity | block | Reproducibility | always | 
| Status | new | Resolution | open | ||
| Summary | 0005750: compilation failure due boost::shared_ptr to bool implicit cast | ||||
| Description | Ardour fails to compile because the compiler (gcc 4.6.4 , boost 1.53) refuse to cast a boost::shared_ptr to a bool on libs/pbd/properties.h +445 and gtk2_ardour/editor_regions.cc +297 I attach a patch checking "boost::shared_ptr<>.use_count() > 0" for the bool values.  | ||||
| Tags | No tags attached. | ||||
| 
		 
 2013-10-26 13:19 
  | 
	
	  boost_shared_ptr_bool_cast.patch (866 bytes)   
 
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 72a0da2..5386528 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -294,7 +294,7 @@ EditorRegions::add_region (boost::shared_ptr<Region> region)
 	string str;
 	TreeModel::Row row;
 	Gdk::Color c;
-	bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
+	bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source()).use_count>0;
 
 	if (!_show_automatic_regions && region->automatic()) {
 		return;
diff --git a/libs/pbd/pbd/properties.h b/libs/pbd/pbd/properties.h
index e65929c..49915fb 100644
--- a/libs/pbd/pbd/properties.h
+++ b/libs/pbd/pbd/properties.h
@@ -442,7 +442,7 @@ public:
 	}
 
 	operator bool () const {
-		return _current;
+		return _current.use_count() > 0;
 	}
 
 protected:
 | 
| 
		 | 
	
	The first patch was wrong. New patch attached with more casts converted. Using shared_ptr<>!=0 instead. Now it finishes the compilation OK  | 
| 
		 
 2013-10-26 14:05 
  | 
	
	  boost_shared_ptr_bool_cast_2.patch (2,616 bytes)   
 
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 72a0da2..7c2eb84 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -294,7 +294,7 @@ EditorRegions::add_region (boost::shared_ptr<Region> region)
 	string str;
 	TreeModel::Row row;
 	Gdk::Color c;
-	bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
+	bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source())!=0;
 
 	if (!_show_automatic_regions && region->automatic()) {
 		return;
diff --git a/gtk2_ardour/export_preset_selector.cc b/gtk2_ardour/export_preset_selector.cc
index 9f699bb..02793f1 100644
--- a/gtk2_ardour/export_preset_selector.cc
+++ b/gtk2_ardour/export_preset_selector.cc
@@ -123,9 +123,9 @@ ExportPresetSelector::update_selection ()
 		}
 	}
 
-	save_button.set_sensitive (current);
-	remove_button.set_sensitive (current);
-	new_button.set_sensitive (!current && !text.empty() && !preset_name_exists);
+	save_button.set_sensitive (current!=0);
+	remove_button.set_sensitive (current!=0);
+	new_button.set_sensitive ((current==0) && !text.empty() && !preset_name_exists);
 }
 
 void
diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc
index 35e9a5c..30107bc 100644
--- a/gtk2_ardour/port_matrix.cc
+++ b/gtk2_ardour/port_matrix.cc
@@ -707,7 +707,7 @@ PortMatrix::io_from_bundle (boost::shared_ptr<Bundle> b) const
 bool
 PortMatrix::can_add_channels (boost::shared_ptr<Bundle> b) const
 {
-	return io_from_bundle (b);
+	return io_from_bundle (b)!=0;
 }
 
 void
@@ -730,7 +730,7 @@ PortMatrix::add_channel (boost::shared_ptr<Bundle> b, DataType t)
 bool
 PortMatrix::can_remove_channels (boost::shared_ptr<Bundle> b) const
 {
-	return io_from_bundle (b);
+	return io_from_bundle (b) != 0;
 }
 
 void
diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc
index 60f575f..0347741 100644
--- a/gtk2_ardour/session_option_editor.cc
+++ b/gtk2_ardour/session_option_editor.cc
@@ -354,7 +354,7 @@ SessionOptionEditor::parameter_changed (std::string const & p)
 bool
 SessionOptionEditor::set_use_monitor_section (bool yn)
 {
-	bool had_monitor_section = _session->monitor_out();
+	bool had_monitor_section = _session->monitor_out() !=0;
 
 	if (yn) {
 		_session->add_monitor_section ();
diff --git a/libs/pbd/pbd/properties.h b/libs/pbd/pbd/properties.h
index e65929c..3c48854 100644
--- a/libs/pbd/pbd/properties.h
+++ b/libs/pbd/pbd/properties.h
@@ -442,7 +442,7 @@ public:
 	}
 
 	operator bool () const {
-		return _current;
+		return _current != 0;
 	}
 
 protected:
 |